Les meilleures pratiques pour la colonne de nommage dans Sql [fermé]
disons que j'ai une table appelée Student. Laquelle des conventions de nommage suivantes préférez-vous pour les colonnes? Vous pouvez également suggérer votre propre.
Student
-------
StudentID
StudentName
MentorID
Student
-------
StudentID
Name
MentorID
Student
-------
ID
Name
MentorID
19 réponses
je voudrais aller avec le second.
Student
-------
StudentID
Name
MentorID
j'aime avoir le nom de la table dans la clé Primaire, mais il n'a pas besoin d'être sur tous les domaines. Aussi MentorID serait comment je nommerais une clé étrangère aussi bien (en supposant Mentor est le nom de la table qu'il pointe à).
de cette façon le champ MentorID dans la table Student a le même nom que le champ MentorID dans la table Mentor. Certaines personnes ne l'aiment pas parce que cela peut être un peu confus en rejoignant des tables, mais je préférons de toute façon nommer explicitement les tables des champs dans joins,
puisque les RDBM réguliers sont en quelque sorte hiérarchiques, un SGBD contient une base de données - une base de données contient une table - une table contient une colonne - une colonne contient une valeur, je n'aime pas l'utilisation itérative des noms de table dans les noms de colonne.
Mon vote va à:
Student
--------
id (pk)
name
mentor (fk) (alt. mentorId)
il est assez facile de sélectionner les bons champs, et en cas de jointures entre les tables Je renommerai souvent les noms de colonne, I. e:
SELECT s.id AS StudentID, s.name AS StudentName, m.id AS MentorId, m.name AS MentorName
FROM Studens AS s
INNER JOIN Mentors AS m ON m.id=s.mentor
depuis quelques formats sql en majuscules, je vais avec le suivant:
student
-------
id
name
mentor_id
de cette façon je peux garder la séparation des mots dans le db.
OO-code que j'utilise le correspondant de chameau cas, les noms de
mentorId, getMentorId ()
je préfère la dernière, de sorte qu'une jointure entre les tables ressembler à ça:
SELECT blah blah blah
FROM Student INNER JOIN Mentor
ON Student.MentorID = Mentor.ID
mais c'est presque aussi subjectif que "aimez-vous l'affaire camel?": P
l'essentiel est d'être cohérent. J'ai eu affaire dans le passé à des bases de données où ils ne pouvaient jamais décider d'un standard. Ainsi, dans certaines tables, le PK serait StudentID, D'autres Student_ID et D'autres ID. Ou ils n'ont pas été utilisés de façon uniforme nom lorsqu'ils sont utilisés comme des clés étrangères. Oy, je commence à diatribe...
je dirais personnellement:
Students
--------
student_id
first_name
last_name
mentor_id
je préfère utiliser les caractères soulignés parce que des études ont montré qu'ils améliorent énormément la lisibilité du code par rapport à la notation camel-back.
je peux aussi comprendre les arguments pour juste utiliser " id "plutôt que" student_id", donc je ne suis pas opposé à cela.
j'préférez la seconde:
Students
-------
StudentID
Name
MentorID
Où:
- Toutes les clés étrangères sont identifiés avec
ID
à la fin de columnname. - Le reste des colonnes sont nommées avec facile à comprendre.
- utilisez aussi
EndDate
,BeginDate
pour les dates.
je préfère le premier.
en donnant aux champs un nom plus spécifique que juste Id
ou Name
, il est plus facile de voir que vous rejoignez correctement, et vous n'avez pas à utiliser d'Alias pour les champs si vous sélectionnez des champs à partir de plus d'une table:
select s.StudentId, s.StudentName, m.MentorId, m.MentorName
from Student s
inner join Mentor m on m.MentorId = s.MentorId
vs.
select s.Id as StudentId, s.Name as StudentName, m.Id as MentorId, m.Name as MentorName
from Student s
inner join Mentor m on m.Id = s.MentorId
aussi, le mot Name
est un mot-clé réservé dans certaines bases de données (par exemple SQL Server), il n'est donc pas toujours pratique d'utiliser comme nom de champ.
même si je déteste ça, J'opterais pour L'Option 1:
Student
-------
StudentID
StudentName
MentorID
La raison pour cela est lorsque vous rejoignez avec d'autres tables avec la colonne "Nom", disons cours ou degré ou quelque chose, joindre nécessite que vous renommez les colonnes pour éviter des noms ambigus. Traiter avec de longs Noms qui ont le nom de la table est ennuyeux, mais il peut vous sauver le travail sur le long terme.
je voudrais aller avec le Nombre 1:
éviter les noms de réserve comme"name". donnez aux champs des noms distinctifs. Je vous avoir à répéter le nom de la table, ainsi soit-il, bien que je n'aime pas voir le nom de la table dans tous les domaines.
évitez simplement D'utiliser ID car alors vous N'avez aucune idée de ce que ID est à quelle table. Faites-le sans ambiguïté et vous devez ensuite le qualifier de toute façon. student_ID = mentor_ID est beaucoup plus lisible que A. id = B. id. Ce n'est pas utile, difficile à lire, doivent alors comprendre A et b est et N'est pas une pratique agile. Le Code / SQL doit être facilement lisible avec les commentaires.
L'utilisateur de underscore aide à la lisibilité, cas de chameau mis à part (car c'est ce que J'utilise dans C#) J'ai toujours mis le PK comme premier nom de champ et le FK associé comme 2nd, 3rd, etc champs.
ne terminez pas un nom de champ avec _s ou _d pour délinier la chaîne ou la date.
j'aime les choses propres et sans ambiguïté parce que je veux être attentionné envers les autres qui viennent derrière moi qui doivent faire maint sur le DB. Trop de gens traînent de mauvaises habitudes de L'accès dans SQL. Surtout parce qu'ils n'avaient pas de mentor pour les aider à apprendre! : -)
rappelez-vous, l'entretien continu est toujours une tâche plus importante que le développement initial.
I utilisez StudentName au lieu de Name car cela facilitera les jointures. Souvent, je trouve que j'ai beaucoup, beaucoup de tables avec une colonne "Nom" et "description".
Et je voudrais aller avec presque la troisième:
Student
-------
Id
Name
Mentor_Id
SELECT Student.Name,
Student_Mentor.Name
FROM Student
INNER JOIN Mentor AS Student_Mentor ON Student.Mentor_Id = Student_Mentor.Id
j'ai l'habitude de faire le numéro 3
Student-------
ID
Name
MentorID
en guise de note d'accompagnement, comme le raccourcissement de mots comme Company, Brother et Number à Co, Bro et No, je recommanderais que L'identité soit raccourcie à " Id "au lieu de "ID", car la majuscule de la lettre " d "suggère que" Id " est un acronyme au lieu d'une abréviation.
nom est probablement un mot réservé, Je ne l'utiliserais jamais comme nom de colonne. Je n'envisagerais pas non plus de stocker des noms dans un seul champ. Vous avez vraiment besoin de prenom, Middle_name, last_name, Suffixe (III, Jr, etc.). Considérez ce que vous devez faire pour interroger un champ de nom quand vous voulez tous les clients nommés 'Smith'.
Je ne nommerais jamais un ID de champ ID. Je préfère mes champs id pour avoir le même nom dans toutes les tables d'enfant car il rend beaucoup plus facile de voir ce que vous parlez à propos surtout quand vous avez une requête complexe impliquant de nombreux identifiants différents.
une seule personne peut-elle servir de mentor? Unikely. Mentors devrait être une table séparée et il devrait y avoir une table de jonction avec StudentID et mentorID
Il n'y a pas de "bonne" réponse. Il suffit de choisir une convention de nommage que vous aimez (et tous les autres qui utiliseront votre base de données) et de s'y tenir. Il existe de nombreuses conventions de nommage bien conçues sur internet. Il suffit de rechercher Google sur "conventions de nommage SQL".
d'après mon expérience, les gens utilisent des styles totalement différents, mais C'est OK tant que l'ensemble de l'application (ou tous les projets dans la même organisation) utilisent les mêmes conventions.
je préfère l'utilisation de ce modèle:
student
-------
id
name
mentor_id
_id for foreign keys
j'ai fait comme ceci:
Student
-------
Id
Name
IdMentor
je suppose que ça imite la notation hongroise. Il y a aussi plus d'une différence visuelle entre IdMentor
et et Mentor.Id
.
Student
-------
Id
Name
MentorId
cela marcherait pour moi.
Student
-------
Id
Name
Mentor_Id
inner join Mentor m on m.Id = s.Mentor_Id
- facile à voir quelle touche est l'étrangère
- requêtes plus Courts
- Pas besoin de alias