Je commence tout juste à travailler avec des clés étrangères pour la première fois et je me demande s'il existe un schéma de dénomination standard à utiliser pour elles?
Compte tenu de ces tableaux:
task (id, userid, title)
note (id, taskid, userid, note);
user (id, name)
Là où les tâches ont des notes, les tâches appartiennent aux utilisateurs et les utilisateurs créent des notes.
Comment les trois clés étrangères seraient-elles nommées dans cette situation? Ou bien, est-ce vraiment important ?
Mise à jour : cette question concerne les noms de clés étrangères, pas les noms de champs!
Réponses:
La convention standard dans SQL Server est:
Ainsi, par exemple, la clé entre les notes et les tâches serait:
Et la clé entre les tâches et les utilisateurs serait:
Cela vous donne une vue "en un coup d'œil" des tables impliquées dans la clé, ce qui permet de voir facilement de quelles tables dépend une table particulière (la première nommée) (la seconde nommée). Dans ce scénario, l'ensemble complet de clés serait:
Ainsi, vous pouvez voir que les tâches dépendent des utilisateurs et que les notes dépendent à la fois des tâches et des utilisateurs.
la source
message
table a unfrom_user_id
et lesto_user_id
deux deviendraientfk_message_user
. Il me semble préférable d'utiliserfk_tablename_columnname
(fk_message_from_user_id dans mon exemple) pour cette raison, puis d'essayer de garder les noms de vos colonnes clairs sur la table cible (c'est-à-dire que to_user_id fait clairement référence à la table des utilisateurs)J'utilise deux caractères de soulignement comme délimiteur ie
En effet, les noms de table contiennent parfois eux-mêmes des caractères de soulignement. Cela suit la convention de dénomination des contraintes généralement parce que les noms des éléments de données contiennent souvent des caractères de soulignement, par exemple
la source
Et pourquoi pas
FK_TABLENAME_COLUMNNAME
?K EEP I t S œuvre S tupid chaque fois que possible.
la source
FK_Animals_OwnerID
—Table des animaux et des propriétaires, définie sur la colonne OwnerIDUne note de Microsoft concernant SQL Server:
donc, j'utiliserai des termes décrivant la dépendance au lieu des termes conventionnels de relation primaire / étrangère.
Lors du référencement de la CLÉ PRIMAIRE de la table indépendante (parent) par la ou les colonnes de nom similaire dans la table dépendante (enfant) , j'omets le (s) nom (s) de colonne:
Lors du référencement d'autres colonnes, ou les noms de colonnes varient entre les deux tables, ou simplement pour être explicite:
la source
Habituellement, je laisse simplement mon ID nommé PK, puis je concatène le nom de ma table et le nom de la colonne clé lors de la dénomination des FK dans d'autres tables. Je ne me soucie jamais de la casse camel, car certaines bases de données ignorent la casse et renvoient simplement tous les noms en majuscules ou minuscules de toute façon. Dans tous les cas, voici à quoi ressemblerait ma version de vos tableaux:
Notez que je nomme également mes tables au singulier, car une ligne représente l'un des objets que je persiste. Beaucoup de ces conventions sont des préférences personnelles. Je suggérerais qu'il est plus important de choisir une convention et de toujours l'utiliser que d'adopter la convention de quelqu'un d'autre.
la source
C'est probablement sur-tuer, mais cela fonctionne pour moi. Cela m'aide beaucoup lorsque je traite en particulier des VLDB. J'utilise ce qui suit:
Bien sûr, si pour une raison quelconque vous ne référencez pas une clé primaire, vous devez référencer une colonne contenue dans une contrainte unique, dans ce cas:
Cela peut-il être long, oui. Cela a-t-il aidé à garder les informations claires pour les rapports, ou m'a-t-il permis de savoir rapidement que le problème potentiel se produisait lors d'une alerte de production? 100% aimeraient connaître les opinions des gens sur cette convention de dénomination.
la source
Mon approche habituelle est
Ou en d'autres termes
De cette façon, je peux nommer deux clés étrangères qui référencent la même table comme une table
history_info table
withcolumn actionBy and actionTo
fromusers_info
Ce sera comme
Notez que:
Je n'ai pas inclus le nom de la table enfant car cela me semble logique, je suis dans la table de l'enfant donc je peux facilement assumer le nom de la table de l'enfant. Le caractère total de celui-ci est de 26 et correspond bien à la limite de 30 caractères d'oracle qui a été déclarée par Charles Burns dans un commentaire ici
la source
Sur la base des réponses et des commentaires ici, une convention de dénomination qui inclut la table FK, le champ FK et la table PK (FK_FKTbl_FKCol_PKTbl) devrait éviter les collisions de noms de contraintes FK.
Donc, pour les tableaux donnés ici:
Donc, si vous ajoutez une colonne pour suivre la dernière modification d'une tâche ou d'une note ...
la source
Si vous ne faites pas souvent référence à vos FK et que vous utilisez MySQL (et InnoDB), vous pouvez simplement laisser MySQL nommer le FK pour vous.
Plus tard, vous pouvez trouver le nom FK dont vous avez besoin en exécutant une requête .
la source
Essayez d'utiliser l'UUID de la version 4 en majuscules avec le premier octet remplacé par FK et '_' (trait de soulignement) au lieu de '-' (tiret).
Par exemple
FK_4VPO_K4S2_A6M1_RQLEYLT1VQYV
FK_1786_45A6_A17C_F158C0FB343E
FK_45A5_4CFA_84B0_E18906927B53
La justification est la suivante
la source