191 votes

Existe-t-il une convention de dénomination pour MySQL ?

Voici comment je fais :

  1. Les noms des tables sont en minuscules, utilisent des caractères de soulignement pour séparer les mots, et sont au singulier (par ex. foo , foo_bar etc.
  2. J'ai généralement (pas toujours) un PK à incrémentation automatique. J'utilise la convention suivante : tablename_id (par exemple foo_id , foo_bar_id etc.).
  3. Lorsqu'une table contient une colonne qui est une clé étrangère, je copie simplement le nom de la colonne de cette clé depuis la table d'où elle provient. Par exemple, disons que la table foo_bar a le FK foo_id (où foo_id est le PK de foo ).
  4. Lorsque je définis des FK pour faire respecter l'intégrité référentielle, j'utilise ce qui suit : tablename_fk_columnname (par exemple, dans le cadre de l'exemple 3, il s'agirait de foo_bar_foo_id ). Comme il s'agit d'une combinaison de nom de table et de nom de colonne, il est garanti qu'elle est unique dans la base de données.
  5. J'ordonne les colonnes comme suit : PKs, FKs, puis le reste des colonnes par ordre alphabétique.

Existe-t-il une meilleure façon, plus standard, de procéder ?

9 votes

Est-il mauvais d'utiliser pour l'auto-incrément PK seulement "id" ? Pourquoi ? Le nom de la colonne n'a de sens que dans le contexte de la table. J'ai donc un "id" dans chaque table, et je peux avoir plusieurs id_<nom_table> pour FK.

3 votes

@Zbyszek Je pense que la raison la plus simple pour s'y opposer est simplement la cohérence/simplicité. Plutôt que d'avoir id_tableB => oh non colonne portant un nom différent id la cohérence de id_tableB => id_tableB ça a l'air plus propre... ou comme OP le fait : foo_id => foo_id plutôt que foo_id => id

0 votes

C'est une excellente méthode. J'utilise presque la même chose, mais pour les noms de table, j'utilise le pluriel pour la table "racine" et le singulier pour les dépendances. Par exemple : entreprises et secteur_entreprise.

129voto

Tom Mac Points 5104

Je dirais qu'avant tout, il faut être cohérent.

Je pense que vous y êtes presque avec les conventions que vous avez décrites dans votre question. Quelques commentaires cependant :

Les points 1 et 2 sont bons, je le reconnais.

Point 3 - malheureusement, ce n'est pas toujours possible. Pensez à la manière dont vous vous débrouilleriez avec une seule table foo_bar qui comporte des colonnes foo_id y another_foo_id qui font toutes deux référence à la foo tableau foo_id colonne. Vous devriez peut-être réfléchir à la manière de gérer ce problème. Mais c'est un cas particulier !

Point 4 - Similaire au point 3. Vous pouvez introduire un nombre à la fin du nom de la clé étrangère pour tenir compte du fait qu'il y a plus d'une colonne de référence.

Point 5 - Je l'éviterais. Il ne vous apporte pas grand-chose et deviendra un casse-tête lorsque vous voudrez ajouter ou supprimer des colonnes d'un tableau à une date ultérieure.

Quelques autres points sont :

Conventions d'appellation des index

Vous souhaiterez peut-être introduire une convention d'appellation pour les index - cela vous sera d'une grande aide pour tout travail sur les métadonnées de la base de données que vous pourriez vouloir effectuer. Par exemple, vous pourriez simplement appeler un index foo_bar_idx1 o foo_idx1 - Tout dépend de vous, mais cela vaut la peine d'y réfléchir.

Noms de colonnes au singulier et au pluriel

Il serait bon d'aborder l'épineuse question du pluriel et du simple dans les noms de vos colonnes et de vos tables. Ce sujet provoque souvent grands débats dans la communauté de la DB. Je m'en tiendrais à des formes singulières pour les noms de tables et les colonnes. Voilà. Je l'ai dit.

L'essentiel ici est bien sûr la cohérence !

0 votes

Qu'est-ce qui serait mieux que le point 5 ? Pourquoi cela pourrait-il devenir un casse-tête ?

8 votes

Pour poursuivre, j'ai trouvé cela très utile pour ceux qui viendront ici plus tard : launchbylunch.com/posts/2014/Feb/16/sql-naming-conventions/

1 votes

J'ai du mal à trouver un bon "schéma" pour nommer mes tables qui contiennent des objets de modèles composés de deux noms (DocumentChapter, DocumentVersion, DocumentType etc.). Par exemple, pour DocumentType, je pourrais le nommer comme suit documenttype o document_type . Je préférerais la dernière, mais la plupart du temps, j'ai une relation de type "many to many" et j'ai besoin d'un tableau ressemblant à ceci document_document_type . Avez-vous des suggestions sur la manière de gérer cette situation ?

24voto

mwan Points 1766

La cohérence est la clé de toute norme de dénomination. Tant qu'elle est logique et cohérente, vous y êtes à 99 %.

La norme elle-même est une question de préférence personnelle. Si vous aimez votre norme, faites-le.

Pour répondre directement à votre question, non, MySQL n'a pas de convention/standard de dénomination préférée. Vous pouvez donc créer votre propre convention (et la vôtre semble logique).

14voto

DanFromGermany Points 7201

MySQL a une courte description de ses règles plus ou moins strictes :

https://dev.mysql.com/doc/internals/en/coding-style.html

Le 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 ?

3 votes

Il s'agit d'une bonne référence. sqlstyle.guide contient un ensemble très complet de directives qui couvrent à peu près tous les cas.

4voto

paulsm4 Points 39422

Heureusement, les développeurs PHP ne sont pas des "bigots du cas Camel" comme certaines communautés de développement que je connais.

Vos conventions ont l'air 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é...

2 votes

Loin d'être bigotes, les majuscules sont en fait désapprouvées par une grande partie de la communauté des bases de données, car certains SGBDR sont insensibles à la casse au point de supprimer les majuscules (ou de tout changer en majuscules), ce qui rend les choses très vite désagréables.

0 votes

@mwan : pouvez-vous préciser "quel RDBMS" ? Et je suis moi-même un jockey des majuscules. Les majuscules ne servent qu'à une seule chose dans mon schéma, à indiquer les tables de jonction et (dans le cas des champs) à indiquer les limites des mots, de sorte que le _ peut être exclusivement utilisé pour indiquer un othertable_id (c'est-à-dire le nom de la table = othertable et le champ dans cette table = id). De plus, si l'autre SGBDR n'est pas sensible à la casse, qu'est-ce que cela peut bien faire ? Je ne vais jamais avoir une version en majuscules et en minuscules de la même table ! Oh, et je ne préfère pas un SGBDR insensible à la casse - je préfère écrire un code cohérent.

7 votes

J'aime l'ironie des utilisateurs de MySQL qui n'aiment pas CamelCase et le nom du produit que nous utilisons : MySQL, écrit en CamelCase

4voto

R. Fabrizio Points 71

Réponse simple : NON

Eh bien, au moins une convention de nommage telle qu'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, comme indiqué dans la documentation MySQL : https://dev.mysql.com/doc/refman/8.0/en/identifiers.html

Je pense que la plupart des outils visuels pour la gestion des bases de données offrent une option pour trier les noms de colonnes (j'utilise DBeaver, et il l'a), donc si le but est d'avoir une belle présentation visuelle de votre table, vous pouvez utiliser cette option que je mentionne.

Par expérience personnelle, je le recommande :

  • Utilisez les minuscules . Cela garantit presque l'interopérabilité lorsque vous migrez vos bases de données d'un serveur à un autre. Parfois, les lower_case_table_names n'est pas correctement configuré et votre serveur commence à envoyer des erreurs simplement en ne reconnaissant pas votre standard camelCase ou PascalCase (problème de sensibilité à la casse).
  • Noms courts . Simple et clair. Le plus facile et rapide est d'identifier votre table ou des colonnes, le mieux. Croyez-moi, lorsque vous faites beaucoup de requêtes différentes dans un court laps de temps est mieux d'avoir tous simples à écrire (et à lire).
  • Évitez les préfixes . À moins que vous n'utilisiez la même base de données pour les tables de différentes applications, n'utilisez pas de préfixes. Cela ne ferait qu'ajouter de la verbosité à vos requêtes. Il y a des situations où cela peut être utile, par exemple, lorsque vous voulez identifier les clés primaires et les clés étrangères, que les noms de tables sont généralement utilisés comme préfixe pour les colonnes d'identification.
  • Utilisez des caractères de soulignement pour séparer les mots . Si vous souhaitez tout de même utiliser plus d'un mot pour nommer une table, une colonne, etc., alors utilisez des caractères de soulignement pour les éléments suivants séparer_les_mots Cela contribue à la lisibilité (vos yeux et votre cerveau stressé vous en seront reconnaissants).
  • Soyez cohérent . Une fois que vous avez votre propre norme, suivez-la. Ne soyez pas la personne qui crée les règles et qui est la première à les enfreindre, c'est honteux.

Et que dire de l'appellation "Pluriel vs Singulier" ? Eh bien, il s'agit surtout d'une question 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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X