Voici comment je fais:
- Les noms de tables sont minuscules, utilise des underscores pour séparer les mots, et sont singuliers (par exemple
foo
,foo_bar
etc. - J'ai généralement (pas toujours) un PK à incrémentation automatique. J'utilise la convention suivante:
tablename_id
(par exemplefoo_id
,foo_bar_id
etc.). - Lorsqu'une table contient une colonne qui est une clé étrangère, je copie simplement le nom de colonne de cette clé à partir de la table dont elle provient. Par exemple, disons que la table
foo_bar
a le FKfoo_id
(oùfoo_id
est le PK defoo
). - Lors de la définition des FK pour appliquer l'intégrité référentielle, j'utilise ce qui suit:
tablename_fk_columnname
(par exemple, pour poursuivre l'exemple 3, ce serait le casfoo_bar_foo_id
). Puisqu'il s'agit d'une combinaison nom de table / nom de colonne, elle est garantie d'être unique dans la base de données. - Je classe les colonnes comme ceci: PK, FK, puis le reste des colonnes par ordre alphabétique
Existe-t-il une meilleure façon de procéder, plus standard?
mysql
naming-conventions
mysql-workbench
StackOverflowNewbie
la source
la source
id_tableB
=> oh pas de colonne de nom différentid
, la cohérence deid_tableB
=>id_tableB
semble juste plus soignée ... ou comme OP le fait:foo_id
=>foo_id
plutôt quefoo_id
=>id
Réponses:
Je dirais d'abord et avant tout: soyez cohérent.
Je pense que vous avez presque atteint les conventions que vous avez décrites dans votre question. Quelques commentaires cependant:
Je pense que les points 1 et 2 sont bons.
Point 3 - malheureusement, ce n'est pas toujours possible. Pensez à la façon dont vous feriez face à une seule table
foo_bar
qui a des colonnesfoo_id
et qui fontanother_foo_id
toutes deux référence à la colonne defoo
tablefoo_id
. Vous voudrez peut-être réfléchir à la façon de gérer cela. C'est un peu une affaire de coin!Point 4 - Similaire au point 3. Vous souhaiterez peut-être introduire un nombre à la fin du nom de la clé étrangère pour permettre d'avoir plus d'une colonne de référence.
Point 5 - J'éviterais cela. Il vous en fournit peu et deviendra un casse-tête lorsque vous souhaitez ajouter ou supprimer des colonnes d'une table à une date ultérieure.
Quelques autres points sont:
Conventions de dénomination d'index
Vous souhaiterez peut-être introduire une convention de dénomination pour les index - ce sera une grande aide pour tout travail de métadonnées de base de données que vous voudrez peut-être effectuer. Par exemple, vous voudrez peut-être simplement appeler un index
foo_bar_idx1
oufoo_idx1
- totalement à vous, mais cela vaut la peine d'être considéré.Noms de colonnes au singulier ou au pluriel
Ce pourrait être une bonne idée d'aborder la question épineuse du pluriel vs unique dans vos noms de colonnes ainsi que dans vos noms de table. Ce sujet suscite souvent de grands débats dans la communauté DB. Je m'en tiendrais aux formes singulières pour les noms de table et les colonnes. Là. Je l'ai dit.
L'essentiel ici est bien sûr la cohérence!
la source
documenttype
oudocument_type
. Je préférerais le dernier, mais la plupart du temps, j'ai une relation plusieurs à plusieurs et j'ai besoin d'une table qui ressembledocument_document_type
. Des suggestions pour gérer cela?La cohérence est la clé de toute norme de dénomination. Tant que c'est logique et cohérent, vous y êtes à 99%.
La norme elle-même est une préférence très personnelle - donc si vous aimez votre norme, exécutez-la.
Pour répondre carrément à votre question - non, MySQL n'a pas de convention / norme de dénomination préférée, donc utiliser la vôtre est bien (et la vôtre semble logique).
la source
MySQL a une brève description de leurs règles plus ou moins strictes:
https://dev.mysql.com/doc/internals/en/coding-style.html
Style de codage le plus courant pour MySQL par Simon Holywell:
http://www.sqlstyle.guide/
Voir aussi cette question: Existe-t-il des directives de style de codage publiées pour SQL?
la source
Heureusement, les développeurs PHP ne sont pas des «bigots de Camel case» comme certaines communautés de développement que je connais.
Vos conventions sonnent bien.
Tant qu'ils sont a) simples et b) cohérents - je ne vois aucun problème :)
PS: Personnellement, je pense que 5) est exagéré ...
la source
Réponse simple: NON
Eh bien, au moins une convention de dénomination en tant que telle encouragée par Oracle ou la communauté, non, cependant, fondamentalement, vous devez être conscient de suivre les règles et les limites pour les identifiants, telles qu'indiquées dans la documentation MySQL: https://dev.mysql.com /doc/refman/8.0/en/identifiers.html
À propos de la convention de dénomination que vous suivez, je pense que c'est correct, juste le numéro 5 est un peu inutile, je pense que la plupart des outils visuels de gestion de bases de données offrent une option pour trier les noms de colonnes (j'utilise DBeaver, et il l'a), donc si le purpouse a une belle présentation visuelle de votre table, vous pouvez utiliser cette option que je mentionne.
Par expérience personnelle, je recommanderais ceci:
lower_case_table_names
n'est pas correctement configuré et votre serveur commence à générer des erreurs simplement en ne reconnaissant pas votre standard camelCase ou PascalCase (problème de sensibilité à la casse).Et qu'en est-il de la dénomination «Plural vs Singular»? Eh bien, c'est surtout une situation de préférences personnelles. Dans mon cas, j'essaie d'utiliser des noms pluriels pour les tables parce que je pense qu'une table est une collection d'éléments ou un paquet contenant des éléments, donc un nom pluriel a du sens pour moi; et des noms singuliers pour les colonnes parce que je vois les colonnes comme des attributs qui décrivent singulièrement ces éléments de table.
la source