Étant donné qu'ils doivent être uniques, que dois-je nommer les FK dans une base de données MySQL?
mysql
naming-conventions
foreign-keys
Des morts-vivants
la source
la source
Réponses:
Dans MySQL, il n'est pas nécessaire de donner un nom symbolique aux contraintes de clé étrangère. Si aucun nom n'est donné, InnoDB crée automatiquement un nom unique.
Dans tous les cas, c'est la convention que j'utilise:
Exemple:
J'essaie de m'en tenir aux mêmes noms de champ dans le référencement et les tables référencées, comme
user_id
dans l'exemple ci-dessus. Lorsque ce n'est pas pratique, j'ajoute également le nom du champ référencé au nom de la clé étrangère.Cette convention de dénomination me permet de "deviner" le nom symbolique simplement en regardant les définitions de table, et en plus elle garantit également des noms uniques.
la source
member_id
~> lien vers le membre de la table,edited_id
~> clé étrangère pour l'utilisateur édité, également lien vers le membre de la table. Comment dois-je les nommer?mon choix est différent. à mon avis, une table devrait avoir un
id
champ, pas unuser_id
seul, car la table est simplement appeléeuser
, donc:user_id
inmessages
table est un champ fk donc il doit indiquer clairement quel id est (user_id
).une convention de dénomination pleinement explicite, à mon avis, pourrait être:
Remarque:
ce fk pourrait être unique, car si une
messages_user
table existe, le nom du champ de référence devrait êtreuser_id
(et pas seulementid
) et le nom fk devrait être:fk_messages_user_user_id_users_id
en d'autres termes, une convention de dénomination de clé étrangère vous garantit des noms uniques si vous utilisez également une convention de dénomination «champ référencé / référencé» (et vous pouvez choisir la vôtre, bien sûr).
la source
$id
variable quelque part sans aucune idée de la table à laquelle elle appartient. Plus votre base de code est ancienne et plus les gens ont travaillé dessus, plus cela devient probable.Si vous ne vous retrouvez pas à référencer les fk aussi souvent après leur création, une option est de rester simple et de laisser MySQL faire le nommage pour vous (comme Daniel Vassallo le mentionne au début de sa réponse ).
Bien que vous ne puissiez pas "deviner" de manière unique les noms des contraintes avec cette méthode, vous pouvez facilement trouver le nom de la contrainte de clé étrangère en exécutant une requête:
Par exemple, vous pouvez recevoir les éléments suivants de la requête:
Si cette étape supplémentaire n'est pas trop pour vous, vous devriez pouvoir trouver facilement le fk que vous recherchez.
la source
La raison est la combinaison de
referencing_table
etreferencing_field
est unique dans une base de données. De cette façon, le nom de la clé étrangère est facile à lire, par exemple:Nous avons donc deux clés étrangères:
L'ajout d'un
user
nom de table au nom de clé étrangère est redondant.la source
user_role
?user
etrole
ont une relation manytomany etuser_role
est la table qui contient toute la clé étrangère. Doit-il l'êtrefk_user_role_role
?