Dois-je utiliser les clés primaires composites ou pas?

Il semble être la seule à être de 2e classe de soutien pour la base de données composite clés en Java de la JPA (via EmbeddedId ou IdClass annotations). Et quand j'ai lu sur des clés composites, indépendamment de la langue, les gens continuent à venir à travers comme étant une mauvaise chose. Mais je ne comprends pas pourquoi. Sont des clés composites est encore acceptable pour l'utilisation de ces jours? Si non, pourquoi pas?

J'ai trouvé une personne qui est d'accord avec moi:
http://weblogs.sqlteam.com/jeffs/archive/2007/08/23/composite_primary_keys.aspx

Mais un autre qui n'est pas le cas:
http://weblogs.java.net/blog/bleonard/archive/2006/11/using_composite.html

Est-ce juste moi, ou les gens sont pas capable de faire la distinction d'où une clé composite est appropriée ou pas? Je vois les clés primaires composites utile lorsque le tableau ne représente pas une entité à - dire lorsqu'elle représente une table de jointure.

Un exemple simple:


Actor { Id, Name, Email }
Movie { Id, Name, Year }
Character { Id, Name }
Role { Actor, Movie, Character }

Ici, l'Acteur, le Film et le Caractère évidemment l'avantage d'avoir une colonne d'Id comme clé primaire.

Mais le Rôle est un plusieurs-À-Plusieurs table de jointure. Je ne vois pas de point dans la création d'un id juste pour identifier une ligne dans la base de données. Pour moi, il semble évident que la clé primaire est { Actor, Movie, Character }. Il semble aussi que plutôt une fonction de limite, surtout si les données dans la table de jointure change tout le temps, vous pourriez vous retrouver avec une clé primaire collisions, une fois la clé primaire de la séquence s'enroule autour de 0.

Donc, revenons à la question initiale, est-il encore acceptable d'utiliser les clés primaires composites? Si non, pourquoi pas?

  • Personnage { Id, Nom } -- c'est sûrement un argument en faveur de clés composites? Je veux dire, je ne vois pas comment la modélisation de Personnage séparément du Film dans lequel il apparaît a aucune valeur. Faire tous les caractères du nom de 'Robin des bois' utiliser le même ID? Et si le "Robin des bois" dans un Film n'est pas de l'homme-dans-Lincoln-vert-collants variété?
InformationsquelleAutor Mike | 2009-06-08