Sql中列命名的最佳实践

Sha*_*awn 22 sql

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

Student
-------
StudentID
StudentName
MentorID

Student
-------
StudentID
Name
MentorID

Student
-------
ID
Name
MentorID
Run Code Online (Sandbox Code Playgroud)

Ray*_*Ray 19

我会选择第二个.

Student
-------
StudentID
Name
MentorID
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我绝对推荐这种方法.对于更大和更复杂的数据库,编写具有大量连接的复杂查询更为常见 - 这种主键命名约定使得查询,编写和理解查询变得更加容易. (2认同)

Bjö*_*örn 19

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

我的投票结果如下:

Student
--------
id (pk)
name
mentor (fk) (alt. mentorId)
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)


And*_*son 9

由于一些sql格式化程序大写的东西,我跟随下面:

student
-------
id
name
mentor_id
Run Code Online (Sandbox Code Playgroud)

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

在OO代码中,我使用相应的驼峰名称

mentorId,getMentorId()


Tom*_*m H 7

我会亲自去:

Students
--------
student_id
first_name
last_name
mentor_id
Run Code Online (Sandbox Code Playgroud)

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

我也可以理解只使用"id"而不是"student_id"的论据,所以我并不反对.

  • 以前有一项研究,最初使它看起来像Camel Case提高了可读性(尽管仅在已经使用过它的人中),但是后来的研究使用了一种改进的测量方法,反之则发现:http://www.cs。 kent.edu/~jmaletic/papers/ICPC2010-CamelCaseUnderScoreClouds.pdf (2认同)

Dan*_*ana 6

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

 SELECT blah blah blah
 FROM Student INNER JOIN Mentor
      ON Student.MentorID = Mentor.ID
Run Code Online (Sandbox Code Playgroud)

但这几乎与"你喜欢骆驼案吗?"一样主观.:P

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


Fer*_*anB 4

我更喜欢第二个:

Students
-------
StudentID
Name
MentorID
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • 所有外键都ID在列名末尾用 进行标识。
  • 其余列的名称都易于理解。
  • 也可以使用EndDate,BeginDate来表示日期。