Dilemme des noms de tableau: noms au singulier et noms au pluriel [fermé]
le milieu Universitaire que les noms de table doivent être au singulier de l'entité qu'ils stocker les attributs de.
Je n'aime pas les T-SQL qui nécessitent des crochets autour des noms, mais j'ai renommé une table Users
au singulier, condamnant à jamais ceux qui utilisent la table à devoir parfois utiliser des crochets.
Mon impression est qu'il est plus correct de rester au singulier, mais mon instinct est aussi que les crochets indiquent les indésirables comme les noms de colonne avec des espaces dans eux etc.
dois-je rester, ou dois-je partir?
11 réponses
je vais juste donner mon opinion pourquoi j'utilise singulier noms.
par exemple, je dois obtenir tous les champs d'un utilisateur:
-- Select every fields from 'user' table
SELECT * FROM user
j'ai besoin du nom de l'utilisateur qui a 21 ans:
-- Select every fields from 'user' table which have 21 years old
SELECT * FROM user WHERE age = '21'
bien sûr, le pluriel peut être utilisé par les mêmes moyens, mais pour mon cerveau à lire, je pense vraiment que c'est la bonne façon de faire.
lignes Directrices sont vraiment comme ça. Ce n'est pas" gravé dans la pierre", c'est pourquoi vous avez la possibilité de les ignorer.
je dirais qu'il est plus logiquement intuitif d'avoir des noms de table pluralisés. Une table est un ensemble d'entités après tout. En plus des autres alternatives mentionnées, je vois souvent des préfixes sur les noms de table...
- tblUser
- tblThis
- tblThat
- tblTheOther
Je ne suggère pas que c'est la voie à suivre, je vois aussi les espaces utilisés beaucoup dans les noms de table que j'abhorre. J'ai même trouvé des noms de champs avec des caractères idiots comme ? comme si ce champ répondait à une question.
Si vous alliez, il y aura des problèmes, mais si vous restez, il sera double.
je préférerais aller à l'encontre d'une supposée convention de nommage Non pluraliste que de donner à ma table un nom qui pourrait être un mot réservé.
j'utilise toujours des noms de table singuliers mais, comme déjà indiqué, la chose la plus importante est d'être cohérent et d'utiliser la même forme pour tous les noms.
ce que je n'aime pas dans les noms de tables pluriels, c'est que les noms combinés peuvent devenir assez étranges. Si par exemple vous avez une table nommée Users
et vous souhaitez stocker les propriétés de l'utilisateur, il en résulterait une table nommée UsersProperties
...
Je n'ai pas vu cela clairement exprimé dans les réponses précédentes. Beaucoup de programmeurs n'ont pas de définition formelle à l'esprit quand ils travaillent avec des tables. Nous communiquons souvent intuitivement en termes de" dossiers "ou de"rangées". Cependant, à quelques exceptions près pour les relations dénormalisées, les tableaux sont généralement conçus de sorte que la relation entre les attributs non-clés et la clé constitue un ensemble de fonctions théoriques.
Une fonction peut être définie comme un sous-ensemble d'un produit croisé entre les deux ensembles, dans lequel chaque élément de l'ensemble de clés se produit au plus une fois dans la cartographie. Par conséquent, la terminologie découlant de cette perspective tend à être singulière. On voit la même convention du singulier (ou du moins, non-pluriel) à travers d'autres théories mathématiques et computationnelles impliquant des fonctions (algèbre et calcul lambda par exemple).
si vous utilisez certains cadres comme Zend Framework (PHP), il est seulement Sage d'utiliser le pluriel pour les classes de table et le singulier pour les classes de ligne.
alors dites que vous créez un objet table $users = new Users() et que vous avez déclaré la classe row comme utilisateur, vous pourrez aussi appeler new User ().
maintenant, si vous utilisez le singulier pour les noms de table, vous devriez faire quelque chose comme new UserTable() avec la ligne étant new UserRow(). Cela ressemble plus maladroit pour moi que d'avoir simplement un objet Users () pour la table et des objets User () pour les lignes.
il n'y a pas de" convention " qui exige que les noms des tables soient au singulier.
Par exemple, nous avions une table appelée "rejets" sur un db utilisé par un processus de notation, contenant les enregistrements rejetés à partir d'une exécution du programme, et je ne vois aucune raison de ne pas utiliser le pluriel pour cette table (l'appeler "rejet" aurait été juste drôle, ou trop optimiste).
Sur l'autre problème (citations) cela dépend du dialecte SQL. Oracle ne nécessite pas de guillemets autour des noms de table.
un nom de TABLE est une définition d'une structure de table. Un nom de vue ou de requête est une définition D'une vue ou d'une requête de (plusieurs) tables. Une TABLE, une vue ou une requête peut contenir l'un des éléments suivants:
0 notices 1 enregistrement De nombreux enregistrements.
Pourquoi sur terre serait vous souhaitez mettre un " s " à la fin d'un nom d'objet? Que voulez-vous signifier en plaçant ce 's' à la fin d'un nom d'objet?
Si vous voulez différencier, puis "_tbl'. Une vue est "_vew" (pas la stupide convention "_v").
suffixe Minimum de 3 caractères-qui arrête cette discussion morte.
une table est un objet DB - pas différent d'un autre.
la sauvegarde de 3 caractères ne sauve rien d'autre que la clarté du sens.
Rouge; -)
tout en recherchant une bonne convention de nommage, la confusion suivante se produit comme si je devais nommer:
1) de l'acc. à ce que la table tient par exemple: Une table des utilisateurs. Sa va toujours être au pluriel. Ainsi, Utilisateurs
2) acc. à quoi ressemble un record par exemple: Un enregistrement dans les tables utilisateurs un utilisateur unique. AINSI, Utilisateur .
Maintenant, le problème pour users_roles majorly. cas 1: acc. la première convention de nommage, users_roles Ce que suggère ce nom, les utilisateurs et leurs rôles.
cas 2: acc. à la deuxième convention de nommage, user_role Ce que ce nom suggère, l'utilisateur et ses rôles.
Bon convention de nommage est de donner une nouvelle idée de l'Entité relations , notamment lorsque de nombreux de nombreux les relations sont stockées .
ici, selon le scénario, nous devrions identifier comme ensembles d'informations.
dans la table users, tous les ensembles formés sont un utilisateur unique. Dans la table des rôles, tous les ensembles formés sont des rôles uniques. Dans la table de relation d'utilisateur et de rôles, des ensembles d'utilisateurs peuvent être formés avec différents rôles qui donne une idée de 1-Beaucoup de relations stockées .
I would prefer,
Users table => user
Roles table => role
users role relationship table => user_roles
Il ya différents documents sur les deux sites, je pense que vous avez seulement besoin de choisir votre côté. Personnellement, je préfère le pluriel pour nommer les tables, et bien sûr le singulier pour nommer les colonnes.
j'aime comment vous pouvez lire ceci:
SELECT CustomerName FROM Customers WHERE CustomerID = 100;
vraiment nous avons OOP, et est grand, mais la plupart des gens continuent à utiliser des bases de données relationnelles, pas de bases de données D'objet. Il n'est pas nécessaire de suivre les concepts OOP pour les bases de données relationnelles.
Un autre exemple, vous avez une table Teams, qui garde TeamID, TeamColor mais aussi PlayerID, et aura même teamID et TeamColor pour une certaine quantité de PlayerID...
à quelle équipe appartient le joueur?
SELECT * FROM Teams WHERE PlayerID = X
tous les joueurs de L'équipe X?
SELECT * FROM Players INNER JOIN Teams ON Players.PlayerID = Teams.PlayerID WHERE Teams.TeamID = X
tout cela vous semble-t-il bon?
de toute façon, regardez aussi les conventions de nommage utilisées par les écoles W3:
j'ai résolu le même problème en nommant la table" Employee "(en fait"Employees"). J'essaie de rester le plus loin possible de tout conflit avec éventuellement des mots réservés. Même les "utilisateurs" sont inconfortablement proches pour moi.