Sql中列命名的最佳实践

时间:2009-03-19 20:55:07

标签: sql

说我有一张叫做学生的桌子。您更喜欢哪些列的命名约定?你也可以推荐自己的。

Student
-------
StudentID
StudentName
MentorID

Student
-------
StudentID
Name
MentorID

Student
-------
ID
Name
MentorID

19 个答案:

答案 0 :(得分:19)

我会选择第二个。

Student
-------
StudentID
Name
MentorID

我喜欢在主键中使用表的名称,但它不需要在每个字段上。另外MentorID也就是我如何命名外键(假设Mentor是它所指向的表的名称)。

这样,Student表中的MentorID字段与Mentor表中的MentorID字段具有相同的名称。有些人不喜欢它,因为在连接表时可能会有点混乱,但我更喜欢在连接中明确命名字段的表格,

答案 1 :(得分:19)

由于常规RDBMS是一种层次结构,DBMS包含一个数据库 - 一个数据库包含一个表 - 一个表包含一个列 - 一个列包含一个值,我不喜欢在列名中迭代使用表名

我的投票结果是:

Student
--------
id (pk)
name
mentor (fk) (alt. mentorId)

选择正确的字段相当容易,如果表之间有连接,我经常重命名列名,即:

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

答案 2 :(得分:9)

因为一些sql格式化程序大写的东西,我跟着下面的内容:

student
-------
id
name
mentor_id

这样我就可以在db中保持单词分离。

在OO代码中的

我使用相应的驼峰名称

mentorId,getMentorId()

答案 3 :(得分:7)

我个人会选择:

Students
--------
student_id
first_name
last_name
mentor_id

我更喜欢使用下划线,因为研究表明它们与骆驼符号相比极大地提高了代码的可读性。

我也可以理解只使用“id”而不是“student_id”的论据,所以我不反对。

答案 4 :(得分:6)

我更喜欢最后一个,以便表​​之间的连接看起来像:

 SELECT blah blah blah
 FROM Student INNER JOIN Mentor
      ON Student.MentorID = Mentor.ID

但这几乎与“你喜欢骆驼案吗?”一样主观。 :P

最重要的是要保持一致。我不得不在过去处理一些他们无法决定标准的数据库。因此在某些表中,PK将是StudentID,其他是Student_ID和其他ID。或者,当用作外键时,它们并未使用一致的名称。哦,我开始咆哮......

答案 5 :(得分:4)

我喜欢第二个:

Students
-------
StudentID
Name
MentorID

其中:

  • 所有外键都在列名末尾标有ID
  • 其余列的名称很容易理解。
  • 还可以使用EndDateBeginDate作为日期。

答案 6 :(得分:4)

我更喜欢第一个。

通过为字段提供比IdName更具体的名称,可以更容易地看到您正确加入,如果选择,则不必为字段使用别名来自多个表的字段:

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

此外,单词Name在某些数据库(例如SQL Server)中是保留关键字,因此使用字段名称并不总是切实可行。

答案 7 :(得分:2)

尽管我讨厌它,但我会选择选项1:

Student
-------
StudentID
StudentName
MentorID

这样做的原因是当使用“名称”列连接其他表时,比如说课程或学位等,加入要求您重命名列以避免使用含糊不清的名称。处理包含表名的长名称很烦人,但从长远来看,它可以为您节省工作。

答案 8 :(得分:2)

我会选择1号:

避免使用“名称”之类的保留名称。给字段带来与众不同我必须重复表名,所以就这样吧,虽然我不喜欢在所有字段中看到表名。

避免使用ID,因为你不知道什么ID是什么表。让它毫无价值,然后你必须要有资格。 student_ID = mentor_ID是一个更可读的整体 比a.id = b.id.这没用,难以阅读,必须弄清楚a和b是什么,而不是敏捷实践。代码/ SQL应该易于阅读,无需评论。

下划线用户有助于提高可读性,骆驼案例(因为这是我在C#中使用的) 我总是将PK作为第一个字段名称,将相关的FK作为第二,第三等字段。

不要使用_s或_d结束字段名称以删除字符串或日期。

我喜欢整洁而且毫不含糊的东西,因为我想要体谅那些不得不在我身后的人。太多人将不良习惯从Access拖入SQL。 主要是因为他们没有导师帮助他们学习! : - )

请记住,正在进行的维护工作总是比原始开发更大。

答案 9 :(得分:1)

可能使用StudentName而不是Name,因为它会使连接更容易。我经常发现我有很多很多表都带有“名称”和“描述”栏目。

答案 10 :(得分:1)

我几乎和第三个一起去了:

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

答案 11 :(得分:1)

我通常做3号

Student-------
ID
Name
MentorID

答案 12 :(得分:1)

作为旁注,如缩短公司,兄弟和数字对公司,兄弟和否的话,我会建议将身份缩短为'Id'而不是'ID',作为字母'd'的大写字母'建议'Id'是缩写而不是缩写。

答案 13 :(得分:0)

名称可能是保留字,我永远不会将其用作列名。 我也不会考虑在一个字段中存储名称。你真的需要first_name,Middle_name,last_name,Suffix(对于III,Jr等)。当您希望所有名为“Smith”的客户时,请考虑在查询名称字段时需要执行的操作。

我也永远不会命名id字段ID。我更喜欢我的id字段在所有子表中具有相同的名称,因为它使得更容易看到你在说什么,特别是当你有一个涉及许多不同id的复杂查询时。

只有一个人可以担任导师吗? Unikely。导师应该是一个单独的表,并且应该有一个包含StudentID和mentorID的连接表

答案 14 :(得分:0)

对此没有“正确”的答案。只需选择您喜欢的任何命名约定(以及将使用您的数据库的所有其他人)并坚持使用它。互联网上有很多精心设计的命名约定。只需在Google上搜索“SQL命名约定”。

根据我的经验,人们使用完全不同的样式,但只要整个应用程序(或同一组织中的所有项目)使用相同的约定就可以。

答案 15 :(得分:0)

我更喜欢使用这种模式:

student
-------
id
name
mentor_id

_id for foreign keys

答案 16 :(得分:0)

我其实喜欢:

Student
-------
Id
Name
IdMentor

我猜这有点模仿匈牙利的符号。 IdMentorMentor.Id之间的视觉差异也大于MentorIdMentor.Id之间的视觉差异。

答案 17 :(得分:0)

Student
-------
Id
Name
MentorId

这对我有用。

答案 18 :(得分:0)

Student
-------
Id
Name
Mentor_Id

inner join Mentor m on m.Id = s.Mentor_Id
  • 很容易看出哪个键是外国的
  • 更短的查询
  • 不需要别名