0

La partie d'un ERD montre la relation entre 3 tables.Cette table a-t-elle besoin d'une nouvelle clé primaire?

Un utilisateur peut posséder plusieurs tarcks (chansons)

Une piste peut appartenir à de nombreux utilisateurs

la table au milieu résout le plusieurs à plusieurs et a une clé primaire composite. Ainsi que le stockage des informations sur la façon dont les utilisateurs spécifiques évaluent des pistes spécifiques.

http://i.imgur.com/Rn4PnGO.png

Est-ce que la table du milieu ont besoin d'une nouvelle clé primaire « User_Rating_ID » ou est-ce bien (mieux?) De le laisser comme une clé composite?

Répondre

0

Cela dépend de la façon dont vous utilisez les données. D'un point de vue strictement logique, la clé primaire composite indique ce qui doit être dit et fonctionne correctement. Il y a quelques situations inhabituelles où avoir un PK séparé peut être utile.

+0

Ça vous dérange d'élaborer sur ces situations ou de me diriger dans la bonne direction? J'ai cherché sur le sujet mais je n'ai rien trouvé de particulièrement utile. – user388600

0

Il n'y a rien de mal dans une table d'intersection plusieurs-à-plusieurs ayant une clé primaire composite composée des deux colonnes de clé étrangère qui pointent sur les deux tables reliées par l'intersection.

Certaines personnes souhaiteront peut-être ajouter une clé primaire candidate supplémentaire, en particulier un numéro d'identification (ou un GUID, etc.) généré par le système sans signification pour de telles tables d'intersection.

Les raisons pour lesquelles une personne peut le faire comprendrait: *

  1. Les tableaux « parent » (liées) peuvent changer à une extrémité et la mise à jour d'un (ou plusieurs) des clés étrangères serait compliqué pour certains raison. Certaines personnes n'aiment pas mettre à jour les clés primaires. Certains ORM ne le permettent pas.
  2. L'intersection peut elle-même être un parent pour une ou plusieurs tables enfant qui doivent avoir une clé étrangère qui pointe vers l'intersection. La propagation de clés composées à d'autres tables peut compliquer votre code et peut ou non être prise en charge par votre ORM, si vous en utilisez une. Parfois, vous avez une raison basée sur l'interface utilisateur pour avoir une seule clé candidate, comme les enregistrements de votre intersection sont affichés dans une zone de liste déroulante et le contrôle zone de liste déroulante a un seul tableau d'éléments de liste qui vous permet d'identifier le enregistrer à partir de la table d'intersection.
  3. Vous pouvez avoir une sorte de contrainte système qui nécessite que vous ayez une seule clé de substitution sur chacune de vos tables, quelles que soient les autres clés primaires candidates. Par exemple, vous pouvez avoir un mécanisme de journalisation d'audit qui suit des éléments tels que table_name, record_id, change_date, change_user et ainsi de suite.
  4. Certaines personnes pensent que chaque table doit avoir une clé de substitution, car c'est leur vision du monde.

* NOTE: Je ne préconise aucune de ces raisons. Je dis que ce sont des opinions que vous trouverez «dans la nature». Votre kilométrage peut varier, prendre vos propres décisions, etc.

1

La table d'intersection définit une relation entre deux entités. S'il s'agit d'une relation anonyme, une clé de substitution distincte n'est pas nécessaire.Par exemple, une table de parties et une table d'unités peuvent avoir une table qui définit quelles parties sont utilisées pour faire chaque unité. Chaque partie peut être utilisée dans plusieurs unités et chaque unité est composée de plusieurs parties (et parfois plusieurs d'une partie particulière). Une telle table peut ressembler à ceci:

UnitID PartID Qty 

Une telle table d'intersection n'aurait probablement pas de clé de substitution. Les questions courantes posées à la relation seront:

  • Quelles parties sont utilisées pour fabriquer l'unité X?
  • Quelle est la pièce la moins chère/la plus chère utilisée pour fabriquer l'unité X?
  • Quelles unités contiennent la partie P?
  • Quelles unités nécessitent le plus grand nombre de parties P?

Je ne peux pas penser à une circonstance où une clé séparée de cette relation serait même utilisée. Toutes les questions concerneront une partie particulière ou une unité particulière.

D'autre part, suivre un cours et un semestre. La table d'intersection établirait les classes, la session spécifique où un cours serait enseigné. Ici, il peut y avoir plusieurs instances d'un cours particulier au cours du même semestre. Il pourrait y avoir une classe de Math-101 pendant 1 heure chaque jour sur m-w-f par Prof. Smith et pendant 1,5 heure chaque jour sur t-th par Prof. Jones.

Lors de l'inscription et d'autres futurs tenue des dossiers, il ne être Math-101 ou le semestre qui sera suivi, mais le particulier classe qui sera utilisé. Pour cette raison, une clé de substitution distincte serait nécessaire.

L'analyse déterminera dans votre cas si la relation est anonyme ou non.