2010-01-25 14 views
1

Cette question peut être mieux posée par l'exemple. Dire que j'ai une table de base de données appelée "Car" avec les colonnes suivantes:Qu'est-ce qu'une bonne structure de données pour un objet clé primaire à valeurs multiples?

(Marque *, Modèle *, NumberOfDoors *, Description, Prix, Kilométrage, Couleur)

Le 3-tuple de marque, le modèle, et NumberOfDoors constitue la clé primaire unique dans la base de données. Qu'est-ce que j'ai fait est fait une classe "Car" pour chaque élément de ligne, mais si je veux avoir une collection d'objets de voitures sous la forme de

{(Marque particulière modèle et porte, compte, ventes en cours), ...}

où le premier élément de chaque élément de la collection est le type unique de voiture, le second est le nombre (combien de ce type que j'ai), et le troisième élément est toute vente actuelle sur ce make-model-doorcount, je suis confronté à un dilemme de structure de données.

Ce que j'ai fait jusqu'à présent fait une struct qui s'insère dans une table de hachage, comme ci-dessous:

//This will be the unique key for the hashtable 
dim uniqueID as String = myCar.make + "@" + myCar.model + "@" + myCar.doorCount 

//This is the structure that will hold the perinent info about that unique 
//car type 
Structure inventory 
    Dim count as Integer 
    Dim currentSales as String 
End Structure 

À ce stade, je pourvoient aux Hashtable de la table de base de données, où le La clé de la hashtable est la chaîne uniqueID, et la valeur est une instanciation de la structure "inventory". C'est (à mon avis) très inélégant cependant, surtout le piraté ensemble unique pour la hashtable. Existe-t-il une meilleure solution de structure de données pour les objets dont la clé primaire est constituée de plusieurs valeurs?

Répondre

5

Vous pouvez utiliser la classe ou la structure réelle en tant que clé primaire.

Remplacez simplement GetHashCode et Equals - ceci vous permet d'utiliser l'objet lui-même comme clé dans un Dictionary, en prenant en compte plusieurs valeurs.

+0

Merci, cela fonctionne très bien :) –

1

De manière générale, je ne suis pas un fan de clés primaires composites. Si possible, envisagez d'utiliser un PK numérique tel que CarId, qui est une identité/numéro automatique. Ensuite, placez une contrainte unique sur les colonnes Make, Model et NumberOfDoors.

+0

Malheureusement, je ne suis pas en mesure de changer la base de données dans ce cas, mais merci pour la suggestion. Je veillerai à garder cela à l'esprit pour toutes les bases de données que j'ai accès à changer dans le futur. –