web-dev-qa-db-fra.com

Dénomination des tableaux: Underscore vs Camelcase? espaces de noms? Singulier vs pluriel?

J'ai lu quelques questions/réponses sur StackOverflow en essayant de trouver le `` meilleur '', ou devrais-je dire doit accepter la manière, pour nommer les tables sur une base de données.

La plupart des développeurs ont tendance à nommer les tables en fonction du langage qui nécessite la base de données (Java, .NET, PHP, etc.). Cependant, je pense que ce n'est pas juste.

La façon dont j'ai nommé les tables jusqu'à présent fait quelque chose comme:

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 

Les choses qui me préoccupent sont:

  • Lisibilité
  • Identification rapide du module d'où provient la table (médecins || patients)
  • Facile à comprendre, pour éviter les confusions.

Je voudrais lire toutes les opinions concernant les conventions de dénomination. Merci.

73
MarioRicalde

Être cohérent est beaucoup plus important que le schéma particulier que vous utilisez.

142
David Oneill

J'utilise généralement PascalCase et les entités sont singulières:

DoctorMain
DoctorProfile
DoctorPatient

Il imite les conventions de dénomination des classes dans mon application en gardant tout assez net, propre, cohérent, et facile à comprendre pour tout le monde.

16
Justin Niessner

La nature insensible à la casse de SQL prend en charge Underscores_Scheme. Cependant, les logiciels modernes prennent en charge tout type de schéma de dénomination. Cependant, parfois, quelques bugs, erreurs ou facteurs humains désagréables peuvent conduire à UPPERCASINGEVERYTHING afin que ceux qui ont sélectionné les deux Pascal_Case et Underscore_Case régime vivre avec tous leurs nerfs en bonne place.

10
terR0Q

J'utilise des traits de soulignement. J'ai fait un projet Oracle il y a quelques années, et il semblait qu'Oracle a forcé tous mes noms d'objets en majuscules, ce qui fait exploser n'importe quel schéma de boîtier. Je ne suis pas vraiment un gars d'Oracle, alors peut-être qu'il y avait un moyen de contourner cela que je n'étais pas au courant, mais cela m'a fait utiliser des soulignements et je n'y suis jamais retourné.

8
Ray

Une agrégation de la plupart des éléments ci-dessus:

  • ne vous fiez pas à la casse dans la base de données
  • ne considérez pas le cas ou la partie séparatrice du nom - juste les mots
  • utilisez n'importe quel séparateur ou cas est la norme pour votre langue

Ensuite, vous pouvez facilement traduire (même automatiquement) des noms entre les environnements.

Mais j'ajouterais une autre considération: vous constaterez peut-être qu'il existe d'autres facteurs lorsque vous passez d'une classe de votre application à une table de votre base de données: l'objet de base de données a des vues, des déclencheurs, des procs stockés, des index, des contraintes, etc. ont également besoin de noms. Ainsi, par exemple, vous pouvez vous retrouver à accéder aux tables uniquement via des vues qui ne sont généralement qu'un simple "select * from foo". Ceux-ci peuvent être identifiés comme le nom de la table avec juste un suffixe "_v" ou vous pouvez les mettre dans un schéma différent. Le but d'une couche d'abstraction aussi simple est qu'elle peut être étendue si nécessaire pour permettre des changements dans un environnement pour éviter d'avoir un impact sur l'autre. Cela ne casserait pas les suggestions de dénomination ci-dessus - juste quelques éléments supplémentaires à prendre en compte.

8
KenFar

J'ai tendance à être d'accord avec les gens qui disent que cela dépend des conventions du langage que vous utilisez (par exemple PascalCase pour C # et snake_case pour Ruby).

Mais jamais camelCase.

5
Mark Rendle

Étant donné que la question n'est pas spécifique à une plate-forme ou à un moteur de base de données particulier, je dois dire que pour une portabilité maximale, vous devez toujours utiliser des noms de table en minuscules.

/ [a-z _] [a-z0-9 _] */est vraiment le seul modèle de noms qui se traduit de manière transparente entre différentes plates-formes. Les caractères alphanumériques minuscules + le soulignement fonctionneront toujours de manière cohérente.

Comme mentionné ailleurs, les noms de relation (table) doivent être singuliers: http://www.teamten.com/lawrence/programming/use -syndic-noms-pour-base-de-noms-de-table.html

5
rich remer

Après avoir lu beaucoup d'autres opinions, je pense qu'il est très important d'utiliser les conventions de dénomination du langage, la cohérence est plus importante que les conventions de dénomination uniquement si vous êtes (et serez) le seul développeur de l'application. Si vous voulez la lisibilité (ce qui est extrêmement important), vous feriez mieux d'utiliser les conventions de dénomination pour chaque langue. Dans MySQL par exemple, je ne suggère pas d'utiliser CamelCase car toutes les plateformes ne sont pas sensibles à la casse. Ici, le soulignement va mieux.

4

Ce sont mes cinq cents. Je suis arrivé à la conclusion que si des bases de données de différents fournisseurs sont utilisées pour un projet, il existe deux meilleures façons:

  1. Utilisez des traits de soulignement.
  2. Utilisez un étui à chameau avec des guillemets.

La raison en est que certaines bases de données convertissent tous les caractères en majuscules et certains en minuscules. Donc, si vous avez myTable, il deviendra MYTABLE ou mytable lorsque vous travaillerez avec DB.

2
Pavel_K

il y a une grande variabilité sur la façon de séparer les mots, donc vous devrez choisir ce que vous préférez; mais en même temps, il semble qu'il y ait presque consensus sur le fait que le nom de la table doit être singulier.

1
Javier

Malheureusement, il n'y a pas de "meilleure" réponse à cette question. Comme @David l'a déclaré, la cohérence est bien plus importante que la convention de dénomination.

1
Kane

Les conventions de dénomination existent dans le cadre d'une langue, et différentes langues ont des conventions de dénomination différentes.

SQL est insensible à la casse par défaut; ainsi, snake_case est une convention largement utilisée. SQL prend également en charge les identificateurs délimités; donc, casse mixte dans une option, comme camelCase (Java, où champs == colonnes) ou PascalCase (C #, où tables == classes et colonnes == champs). Si votre moteur de base de données ne peut pas prendre en charge la norme SQL, c'est bien son problème. Vous pouvez décider de vivre avec cela ou choisir un autre moteur. (Et pourquoi C # devait simplement être différent est un point d'aggravation pour ceux d'entre nous qui codent dans les deux.)

Si vous avez l'intention de n'utiliser qu'une seule langue dans vos services et applications, utilisez les conventions de cette langue à toutes les couches. Sinon, utilisez les conventions les plus utilisées de la langue dans le domaine où cette langue est utilisée.

0
Chris Golledge