Nom de table pluriel vs singulier


41

Comment nommer mes tables lors de la création d'une nouvelle base de données?

Singulier: Clientou pluriel: Clients?


Un de mes collègues a déjà insisté pour que les noms de table soient singuliers et les noms de vues au pluriel.
René Nyffenegger

1
Il y a d'autres écoles de pensée. 1) Utilisez des verbes qui permettront d’exprimer des requêtes en langage naturel, par exemple person NAMED 'fred' EARNS 20,000(où les noms en majuscules sont les tables). 2) utiliser le nom de l'entreprise pour l'ensemble par exemple PERSONNEL, PAYROLL, ORG_CHART, etc.
onedaywhen

Réponses:


44

Dépend de vous. Juste être cohérent si.

Personnellement, je préfère le singulier en fonction de ce que chaque * rangée "stocke: Ordre, Produit, Utilisateur, Article, etc.

Cela correspond à ma modélisation (via la modélisation de rôle d'objet) dans laquelle j'utilise des entités / types singuliers.

Modifier:

L' une des raisons est que pluriel échoue lorsque vous avez des tables de liens:
Orders, Productsdonnerions OrderProductsou OrdersProducts. Ni semble correct

Ou des tables d'historique (bien sûr, vous pouvez utiliser des schémas pour cela):
Orders-> OrdersHistoryou (non!) OrdersHistories? Ne serait pas Order-> OrderHistorymieux?


2
Cela doit-il toujours se résumer à un choix personnel ? Et si deux personnes travaillaient dans une conception de base de données, on pourrait alors nommer les tables au pluriel et l’autre au singulier. Y at-il pas de raisonnement valable quant à pourquoi utiliser Singularou Plural?
John Isaiah Carmona

2
@JohnIsaiahCarmona: ajout d'une raison
gbn

3
Je suis d'accord sur l'utilisation du singulier comme étant le plus raisonnable. Cela ne semble pas être l'opinion populaire si vous examinez des questions similaires ici et sur SO, etc. Beaucoup de personnes semblent adopter une vue programmée des tables en tant que collections, qui doivent donc comporter des noms au pluriel. Je pense que les ORM pourraient peut-être commencer à se débarrasser de cette (mauvaise) habitude. Si vos tables ont plusieurs noms pour commencer, il est difficile de distinguer les propriétés de navigation parent et enfant et de distinguer les objets d'instance et de collection pour une table.
Joel Brown

4
Une autre raison en faveur de Singular est si vous avez pour règle que la PK porte le nom nom_table, par exemple TablenameIDou TablenameCodeou tablename_id. Avec plusieurs noms de table, vous vous retrouvez avec Orders.OrdersID(ce qui ne semble pas correct) ou avec Orders.OrderIDoù vous utilisez pluriel pour les noms de table, mais changez au singulier pour les préfixes de colonne.
Ypercubeᵀᴹ

Un autre point dans le même sens.
Jack Douglas

8

En ce qui concerne les noms de table au singulier ou au pluriel, le sujet semble être controversé, mais il ne devrait pas l'être.

Bien qu'une table soit une collection de plusieurs enregistrements, une table est nommée d'après la définition du type d'enregistrement qu'elle contient. Si une table était autorisée à porter un nom différent de celui du type d’enregistrement qu’elle contient, vous pouvez lui attribuer un nom au pluriel, afin d’avoir par exemple une table Employees contenant plusieurs enregistrements Employee. Mais le concepteur de SQL n'a pas fourni de noms distincts pour les tables et les types d'enregistrement.

Les choses fonctionnent plus logiquement pour les programmes orientés objet qui utilisent les données, si le nom d'un type d'enregistrement (et par extension, le nom de la table) est conservé au singulier, car il correspond au nom de la classe que vous utiliseriez pour décrire un enregistrement. .

Si vous souhaitez ensuite identifier une collection dans le programme, vous pouvez utiliser un pluriel ou, mieux, un modificateur approprié, tel que EmployeeList ou EmployeeArray.

Il existe également un problème de pluriels irréguliers pour la génération automatique de code et de programmeurs ayant des antécédents linguistiques différents ou des idées sur la formation de pluriels dans un programme.

La langue anglaise n'est pas un langage de programmation correct et approprié. Il est erroné d'essayer de rendre les déclarations de base de données et de programme conformes à l'anglais car il semble préférable de lire l'une de ces déclarations.


5

Tout comme la réponse de @ gbn, je pense que c’est surtout une question de préférences et, tout comme lui, je recommande à tout choix que vous le fassiez de l’appliquer partout (dans cette base de données au moins). La cohérence en vaut la peine.

Ma préférence, cependant, est que le pluriel sonne mieux dans les SELECTénoncés:

SELECT Id, Name, Status 
FROM   Persons
WHERE  Status <> 5  --5 meaning deleted

Je veux dire que dans ce cas, au moins, il y a plusieurs personnes dans la table et plusieurs d'entre elles sont retournées au client.


2
+ 1 mais techniquement, le pluriel de Person is People est une des raisons pour lesquelles j'utilise le singulier. Certains ORM créeront automatiquement les tables pour vous et vous obtiendrez des scénarios étranges comme celui-ci où la dénomination linguistique n'est pas logique.
Mr.Brownstone

5

"ordre" est un mot réservé. "ordres" n'est pas

"utilisateur" est un mot réservé. "utilisateurs" n'est pas

"session" est un mot réservé. "sessions" n'est pas

"résultat" est un mot réservé. "résultats" n'est pas

"relatif" est un mot réservé. "parents" n'est pas

...

Ceux-ci semblent être des mots courants qui pourraient figurer dans une base de données métier. Les mots pluriels semblent être moins communs comme mots clés que les mots singuliers. Par conséquent, il pourrait être avantageux d’utiliser plusieurs noms de table afin d’éviter les conflits avec les mots-clés SQL.


1
C'est trop proche pour plus de clarté. Restez à l’écart des mots réservés, singuliers ou pluriels. Cela aide vraiment lors du débogage de messages d'erreur qui utilisent des pluriels de mots réservés de manière interchangeable. Idéalement, choisissez des mots du domaine de l'application pour le rendre plus pertinent pour l'utilisation / l'utilisateur.
Utilisateur Emacs

que veut dire "trop ​​proche pour plus de clarté"?
Neil McGuigan

1
Cela signifie une surcharge inutile inutile de déchiffrer les messages d'erreur. Par exemple, order by et orders dans les messages d'erreur de syntaxe. Ou essayer de déboguer l'utilisateur et les utilisateurs dans les messages d'erreur d'authentification.
Utilisateur d'Emacs

IMO PurchaseOrder, PortalUser, UserSession valent mieux que simplement Order, User, Session si singulier pourrait bien se passer dans ce scénario
John Jai

1

Je crois que la table SQL devrait avoir des noms au pluriel. Il se lit simplement beaucoup mieux.

Une table de registres de livres devrait s'appeler des livres. L'ORM devrait utiliser la même convention. L'objet Livres est une collection et préside tous les enregistrements de la table Livres. Un objet Book préside un seul enregistrement.

Cela rend le codage plus naturel.

select name, publication_date from books where publication_date > '2000-01-01';

books = Books()
for book in books.get("publication_date >= '2000-01-01'"):
    print book.name

Cela a du sens jusqu'à ce que vous ayez à écrire pour les moutons en seep.get ... Règles de pliage , soyez flexible.
Utilisateur d'Emacs

Il est vrai que certains conteneurs sont des mots avec des noms non pluriels, comme 'accès'. mais on peut modifier en utilisant: 'for access_record in access'.
dlink

Cela me conduit un peu mal à voir les objets de lien cependant. Que diriez-vous d'une table de lien entre les livres et les auteurs? "BooksAuthors" semble et semble horrible, mais "BookAuthor" semble et sonne mieux. Ensuite, vous entrez dans des mots qui ont des fins impaires pour les pluriels (statuts) ou qui sont des noms irréguliers (enfant contre enfants). IMO un monde de douleur oculaire!
blobbles

Bonjour, @blobbles au pluriel serait BookAuthors, pas BooksAuthors. Donc, ça se lit encore naturellement. BookPublishers, BookFormats, etc.
dlink

La lisibilité est toujours bonne, mais il ne s'agit pas d'une phrase, mais des endroits où nous obtenons des données. par exemple table.field, tout author.authorNameva parfaitement bien. Obtenez le nom d'auteur de la table author. Quand il n'y a qu'un seul auteur, le pluriel a également une mauvaise image. authors.authorNamequand il n'y a qu'un seul auteur? C'est plus déroutant imo. Bien sûr, cela est bien meilleur maintenant que nous avons supprimé le style de phrase mysql_ et que nous disposons de meilleurs moyens d'accéder aux données :)
James

1

Après avoir travaillé avec la programmation pendant quelques années, j'ai conclu que la pluralisation est une complication inutile. Mon opinion est que, selon la philosophie KISS, un programmeur doit rechercher la solution la plus simple et la plus simple à tous les problèmes pour des raisons de temps et d'efficacité. Ainsi, le singulier vous donne moins de travail dans tous les scénarios.


Cette réponse n'ajoute vraiment rien au fil entier! Vous ne parvenez pas à résoudre le problème en appelant une table "commande" par exemple! Personnellement, j'utilise des mots français quand l'anglais ne fait pas l'affaire - ordre, groupe ... Utilisez toujours le champ de commentaires de votre table pour expliquer votre choix! Mais le plus important est d’avoir une convention et de s’y tenir !
Vérace le

Comment ne rien ajouter? J'ai ajouté que le singulier est moins de travail à mon avis. Si vous avez une opinion différente de la mienne, ne dévaluez pas mon opinion. "Les commandes" n'est pas le problème, le problème est une pluralisation plus complexe qui n'est pas un -s tel que "Catégories" que j'ai vu mal orthographié dans toutes sortes de combinaisons causant un travail inutile.
ColacX le

0

C'est une chose très personnelle. J'utilise la forme singulière depuis 30 ans. Mais je peux voir pourquoi les gens aiment les pluriels. Les livres - auteurs sont intéressants car je pense que les auteurs de livres ne se sont pas trompés. Un livre peut avoir un ou plusieurs auteurs. Et les auteurs peuvent avoir écrit un ou plusieurs livres (par exemple co-écrit). Cela dépend également de la façon dont vous traitez les livres écrits par plusieurs auteurs. Je suis d'accord avec d'autres réponses. choisissez-en un et soyez cohérent. En ce qui concerne les problèmes de mots réservés. Je pense qu'il n'est pas difficile de trouver des noms de solution de contournement. utilisateur -> utilisateur_app, session -> session_session, commande -> commande_client


0

Nous voyons les choses sous des perspectives différentes, et je pense que les deux camps sont identifiés par:

Singular ("utilisateur")
Personne qui établit une corrélation entre le nom de la table et le fait qu'il représente un conteneur pouvant contenir plusieurs lignes.

Donc, "conteneur utilisateur" peut contenir plusieurs lignes.

Pluriel ("utilisateurs")
Personne qui ne fait pas la corrélation entre le nom de la table et le fait qu'il représente un conteneur. Bien sûr, ils savent que c'est un conteneur, mais ce n'est pas dans le nom.

Par exemple,
une "boîte à oeufs" peut contenir plusieurs oeufs, mais cela est évident car la référence du conteneur est dans le nom, ce qui permet de créer plusieurs oeufs. Cependant, avec le nom singulier "utilisateur" de la table, la référence du conteneur n’est pas dans le nom. Par exemple, "user_container" serait probablement acceptable pour les personnes qui préfèrent les noms au pluriel.

Je pense que cela est également dû au fait que le pluriel est une pratique courante depuis des années et que la plupart des supports pédagogiques en ligne le permettent.


Cela dit, je pense que techniquement, le singulier est plus précis étant donné que nous nommons un seul conteneur et que les conteneurs peuvent contenir plusieurs lignes (ou une seule).
Les personnes semblent lier mentalement le lien entre le nom de la table et le contenu (plusieurs lignes nécessitent un nom au pluriel) plutôt que de lier mentalement le conteneur nommé au contenu (un conteneur en autorise plusieurs).

Comme toujours, il n’ya souvent ni bon ni mauvais, et c’est davantage ce qui convient au scénario et surtout la cohérence avec ce que vous choisissez.

Si vous ne faites que le projet et qu'il n'y a pas de vraie raison d'aller dans l'un ou l'autre sens, faites ce que vous estimez être le meilleur, ou juste la préférence. Appliquez la même chose dans une équipe de développement et prenez une décision unanime.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.