Multi-Colonne de Clé Primaire dans MySQL 5
Je suis en train d'apprendre comment utiliser les touches et pour briser l'habitude d'en avoir nécessairement SERIAL
Id de type de toutes les lignes dans tous mes tableaux. En même temps, je fais aussi des plusieurs-à-plusieurs liens, et donc nécessitant des valeurs uniques sur les deux colonnes de la tables de coordonner les relations entraverait que.
Comment puis-je définir une clé primaire sur une table de telle sorte que toute valeur donnée peut être répété dans toute la colonne, à condition que la combinaison des valeurs à travers toutes les colonnes n'est jamais répété exactement?
- Double Possible de Comment créer correctement les clés primaires composites - MYSQL
- Ne peut pas être un doublon de quelque chose de publié 3 ans plus tard.
- meta.stackexchange.com/questions/147643/... 😉
Vous devez vous connecter pour publier un commentaire.
De la cité Syntaxe CREATE TABLE page:
Quelque chose comme ceci peut être utilisé pour de multiples colonnes de clés primaires:
De 13.6.4.4. Les Contraintes de CLÉ ÉTRANGÈRE
Clé primaire est un concept de domaine unique (nécessairement et suffisamment) identifie une entité parmi d'autres entités similaires. Un composite (plusieurs colonnes de clé primaire n'a de sens que lorsqu'une partie de la clé se réfère à une instance particulière d'une autre entité de domaine.
Disons que vous avez une collection personnelle de livres. Tant que vous êtes seul, vous pouvez les compter et de les assigner à chacun un numéro. Le nombre est la clé primaire de domaine de votre bibliothèque.
Maintenant, vous voulez fusionner votre bibliothèque avec celle de votre voisin, mais encore être en mesure de distinguer à qui un livre appartient. Le domaine est maintenant plus large et la clé primaire est maintenant (propriétaire, book_id).
Donc, ce qui rend chaque clé primaire composite ne doit pas être votre stratégie, mais plutôt que vous devez utiliser quand il le faut.
Maintenant quelques faits à propos de MySQL. Si vous définissez une clé primaire composite et souhaitez le RDBSM à incrémentation automatique de l'id pour vous, vous devez savoir à propos de la différence entre MyISAM et InnoDB comportement.
Disons que nous voulons une table avec deux champs: parent_id, child_id. Et nous voulons que la child_id être autoincremented.
MyISAM sera autoincrement de façon unique dans les enregistrements avec le même parent_id et InnoDB va autoincrement de façon unique dans l'ensemble de la table.
En MyISAM, vous devez définir la clé primaire comme (parent_id, child_id), et en InnoDB comme (child_id, parent_id), parce que le autoincremented champ doit être le plus à gauche constituant la clé primaire dans InnoDB.
La clé primaire est une valeur unique pour la ligne. Il ne fait aucun sens pour inclure le prix, une valeur qui peut changer. Imaginez si vous deviez changer une large gamme de prix, alors toutes les valeurs de clé primaire allait changer. Quel gâchis ce serait!