2010-03-01 3 views
1

J'ai quatre tables: ItemCategory, Items, DiamondCategoy et Diamonds.Aide à la conception de base de données

Les détails de l'élément de magasin d'utilisateurs et de préciser si elle a un diamant, par exemple:

ItemCategory: Ring 
Item: R1 

S'il y a un diamant alors:

DiamondCategory: Round 
Diamond: D1 

Alors R1 Anneau a D1 Ronde

Un article pourrait avoir aucun diamant, par exemple:

ItemCategory: Ring 
Item: R1 
DiamondCategory: None 
Diamond: None 

Je n'arrive pas à comprendre comment concevoir les relations. Je suis venu avec cette solution, corrigez-moi si je me trompe.

ItemCategory:

c_Id >> PK 

Articles:

p_Id >> PK 

c_Id >> FK 

d_Id >> FK 

Diamants:

d_Id >> PK 

dc_Id >> FK 

DiamondCategory:

dc_Id >> PK 

Est-ce exact?

Répondre

1

Cela me va bien, pour autant que cela se passe. Si un élément peut avoir plus d'un type de diamant (autant d'anneaux font), vous voudrez probablement avoir une intersection (jonction) table, comme ceci:

Articles:

p_Id >> PK 

c_Id >> FK 

ItemDiamonds

L'ID d'élément et l'ID de diamant sont des clés étrangères, et ensemble (ID d'élément, ID diamant) forment une clé primaire ou unique. L'attribut no_of_diamonds suppose qu'un objet peut contenir plusieurs types de diamants.

une table distincte pour chaque code Recherch (vos tables de catégorie) présente deux avantages:

  • Il est le seul moyen d'appliquer la clé étrangère pour l'ID approprié Catégorie à une catégorie donnée
  • Les produits de base de données avec des optimiseurs sophistiqués (tels qu'Oracle) peuvent utiliser les tables plus spécifiques pour produire des plans d'exécution plus précis.
2

Si un objet et un diamant ne peuvent avoir qu'une catégorie, pourquoi avez-vous besoin de tables séparées pour ceux-ci? Il vous suffit d'inclure la catégorie en tant qu'attribut dans vos tableaux Articles et Diamants.

Ensuite, vous auriez deux tables, une pour les éléments et un pour Diamond, et une troisième table qui sert de table de recherche entre les deux, et stockerait la clé primaire pour l'élément et la clé primaire pour le correspondant diamant qu'il a.

+0

Ceci est une meilleure solution. Si vous n'indexez pas vos colonnes clés, vous passerez beaucoup de temps à joindre des tables. –

+0

Eh bien, j'ai les tables de catégories séparées car chacune a ses propres attributs déjà. ItemsCategory a 10 enregistrements, et DiamondCat a 8. Quand j'ajoute un nouvel item, je sélectionne sa catégorie à partir d'une combobox bornée à la table ItemsCat, insère les détails des objets et si elle a un losange, je sélectionne sa catégorie et son poids. Je ne peux pas faire cela si la catégorie est dans la même table. – DanSogaard

Questions connexes