MySQL conventions de nommage, si le nom contient le nom de la table?
Un ami m'a dit que je devrais inclure le nom de la table dans le champ nom de la même table, et je me demande pourquoi? Et doit-il être comme ça?
Exemple:
(Table) Users
(Fields) user_id, username, password, last_login_time
Je vois que le préfixe "user_" est vide de sens depuis que je sais que c'est déjà pour un utilisateur. Mais j'aimerais vous entendre aussi.
note: je fais de la programmation en php, mysql.
Voir aussi: stackoverflow.com/questions/529863/...
Je suis l'aide de la Doctrine-Project (ORM), et il utilise comme ceci: un(Utilisateur) à un(Photo): l'Utilisateur[id, nom, âge, picture_id], Tableau[id, nom de fichier, fichier]
Je suis l'aide de la Doctrine-Project (ORM), et il utilise comme ceci: un(Utilisateur) à un(Photo): l'Utilisateur[id, nom, âge, picture_id], Tableau[id, nom de fichier, fichier]
OriginalL'auteur Omar Al-Ithawi | 2009-08-23
Vous devez vous connecter pour publier un commentaire.
Je suis d'accord avec vous. Le seul endroit où je suis tenté de mettre le nom de la table ou une forme abrégée de il est sur les clés primaires et étrangères, ou si le "naturel" le nom est un mot-clé.
J'utilise généralement " id " est la principale clé de nom de champ, mais dans ce cas, je pense user_id et post_id sont parfaitement OK aussi. Notez que le post date qui a été appelé "post_date" parce que "date" est un mot-clé.
Au moins c'est ma convention. Votre kilométrage peut varier.
user_id
au lieu deid
sur les clés primaires et étrangères, c'est qu'il rend les jointures NATURELLES un jeu d'enfant.OriginalL'auteur cletus
Je ne vois aucune raison d'inclure le nom de la table, c'est superflu. Dans les requêtes, vous pouvez consulter les champs <nom de la table>.<nom> de toute façon (eg. "de l'utilisateur.id").
OriginalL'auteur Filip Navara
Générique de champs comme 'id' et 'nom', il est bon de mettre le nom de la table.
La raison en est qu'il peut être source de confusion lors de l'écriture des jointures entre plusieurs tables.
Il est question de préférence personnelle, vraiment, mais c'est le raisonnement derrière tout ça (et j'ai toujours le faire de cette façon).
Quelle que soit la méthode que vous choisissez, assurez-vous qu'il est cohérent dans le projet.
OriginalL'auteur Noon Silk
Personnellement je ne suis pas d'ajouter les noms de table pour les noms de champs dans la table principale, mais lorsque vous l'utilisez comme une étrangère dans une autre table, je vais le préfixer avec le nom de la table source. par exemple, Le champ d'id dans la table des utilisateurs sera appelé id, mais sur les commentaires de la table, où les observations sont liées à l'utilisateur qui a posté, il sera user_id.
Cela, j'ai ramassé de CakePHP schéma de nommage et je pense que c'est assez soignée.
OriginalL'auteur
En préfixant le nom de la colonne avec le nom de la table est un moyen de garantir noms de colonnes uniques, ce qui rend plus facile de rejoindre.
Mais c'est un pénible pratique, surtout si lorsque nous avons longtemps les noms de table. Il est généralement plus facile d'utiliser les alias le cas échéant. En outre, il n'aide pas quand nous sommes auto-assemblage.
Comme un modeleur de données, je ne trouve difficile d'être cohérent tout le temps. Avec les colonnes ID, je théoriquement préfèrent avoir juste
ID
mais en général je trouve que j'ai des tables avec des colonnes appeléUSER_ID
,ORDER_ID
, etc.Il existe des cas où il peut être positivement avantageux d'utiliser une commune nom de la colonne dans plusieurs tables. Par exemple, lorsqu'une logique de super-type/sous-type de relation a été rendu seulement à l'enfant des tables, il est utile de conserver le super-type de la colonne sur tous les sous-types de tables (par exemple
ITEM_STATUS
) au lieu de le renommer pour chaque sous-type (ORDER_ITEM_STATUS
,INVOICE_ITEM_STATUS
, etc). Cela est particulièrement vrai quand ils sont énumérations avec un ensemble commun de valeurs.OriginalL'auteur APC
Par exemple, votre base de données avec les tables qui stockent des informations sur les Ventes et les services de ressources Humaines, vous pourriez le nom de tous vos tableaux de service des Ventes comme indiqué ci-dessous:
SL_NewLeads
SL_Territories
SL_TerritoriesManagers
Vous pourriez le nom de tous vos tableaux de service des ressources Humaines comme indiqué ci-dessous:
HR_Candidates
HR_PremierInstitutes
HR_InterviewSchedules
Ce genre de convention de nommage permet de s'assurer, tous les tableaux sont regroupés ensemble quand vous avez une liste de toutes vos tables dans l'ordre alphabétique. Toutefois, si votre base de données traite d'une seule logique de groupe des tables, vous ne devez pas utiliser cette convention de nommage.
Noter que, parfois, vous vous retrouvez à la verticale de partitionnement des tables dans deux tables ou plus, bien que ces partitions de représenter efficacement la même entité. Dans ce cas, ajouter un mot qui décrit le mieux l'partition, au nom de l'entité
OriginalL'auteur
En fait, il y a une raison pour ce genre de nommage, surtout quand il s'agit de domaines, vous êtes susceptible de le rejoindre à la. Dans MySQL au moins, vous pouvez utiliser le
USING
mot-clé au lieu deON
, puisusers u JOIN posts p ON p.user_id = u.id
devientusers u JOIN posts p USING(user_id)
qui est plus propre de l'OMI.Sur d'autres types de domaines, vous pouvez bénéficier lors de la sélection
*
, parce que vous n'avez pas à spécifier la liste des champs dont vous avez besoin et de rester sûr de champ qui vient de la table. Mais en général, l'utilisationSELECT *
est déconseillé sur les performances et de mainenance raisons, donc, je considère la préfixation de ces champs avec le nom de la table une mauvaise pratique, même si elle peut différer d'une application.En fait, après réflexion, cette réponse obtient un +1 de ma part. Vous pouvez avoir votre gâteau et le manger aussi. Créer le domaine spécifique pkeys & clefs à la userID, n ° de commande. Qui permet sémantiquement significatifs de sélection de champ e.g alias.fooID vs alias.id fooID) et nettoyer les jointures naturelles lorsqu'il est nécessaire de descendre à manuel sql. Puis, à wrapper/ORM de la couche suffit d'utiliser de domaine.id de la convention, étant donné que vous travaillez avec des objets de toute façon (c'est à dire pas de point dans l'écriture foo.fooID, il suffit de dire foo.id)
OriginalL'auteur Fluffy
Sonne comme la conclusion est:
Si le nom du champ est unique à travers des tables - préfixe de nom de table. Si le nom du champ a le potentiel pour être dupliqué dans d'autres tables, nom unique.
J'ai trouvé les noms de champs tels que "img, adresse, téléphone, ans" depuis plusieurs tableaux peuvent inclure des images différentes, les adresses, les numéros de téléphone, et des années.
OriginalL'auteur huisjames
Nous devrions définir les clés primaires avec le préfixe du nom de la table.
Nous devrions utiliser use_id au lieu si l'id et post_id au lieu de simplement les id.
Avantages:-
1) Facilement Lisible
2) Facilement de se différencier dans les requêtes de jointure. Nous pouvons minimiser l'utilisation de l'alias dans la requête.
table utilisateur : user_id(PK)
table post : post_id(PK) user_id(FK) ici de l'utilisateur table PK et table post FK sont même
Comme par la documentation,
3) de Cette façon, nous pouvons obtenir bénéficier de JOINTURE NATURELLE et JOIGNEZ-vous à l'AIDE de
Ces changements ont cinq aspects principaux:
1) La façon dont le serveur MySQL détermine le résultat des colonnes NATURELLES ou en UTILISANT les opérations de jointure (et donc le résultat de la clause from).
2) l'Expansion de SELECT * et SÉLECTIONNEZ nom_table.* dans une liste de colonnes sélectionnées.
3) la Résolution de noms de colonne de la physique ou à l'AIDE de jointures.
4) la Transformation des ressources NATURELLES ou à l'AIDE de jointures en REJOINDRE ... SUR.
5) la Résolution de noms de colonne dans la condition de JOINTURE ... SUR.
Exemples:-
OriginalL'auteur Ravi Hirani