列名命名约定和最佳实践


19

列命名方面,我想对最佳做法提出一些专家意见。

背景是根据Wikipedia的以下语法,

SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);

SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);

但是,该JOIN ... USING语法仅适用于所有具有全局唯一名称的主键列。因此,我想知道这是否被认为是正确的做法。

我个人经常使用PK列id和外键列创建表othertable_id。但是那样就无法使用USINGNATURAL JOIN

任何与设计风格或表设计最佳实践指南的链接也将不胜感激!


3
维基百科是错误的。第一个版本绝不比第二个版本有效。在
后台

Answers:


13

之前在SO上已经问过这个问题。

如果您有通用且非常不明确的名称,请在前缀之前加上表名称。也就是说,几乎在每个查询中您都必须使用别名的任何内容。

因此,对于Employee表,我将拥有

EmployeeID
EmployeeName
Comment
Salary
StartDate
EndDate
InsertedDateTime
...

维基百科实际上说:

但是,由于结果集不同于带有显式谓词的版本的结果集,因此USING构造不仅仅是语法糖。具体地说,在USING列表中提到的任何列将仅使用一次无限定名称出现一次,而不对连接中的每个表出现一次。

那少一栏。SELECT *无论如何,您永远都不会用,所以重点很重要...


我没想到要搜寻-愚蠢的我。您是否有任何特别出色的SO问题的链接?无论如何,谢谢,我将坚持今后使用的“唯一ID”!
Kerrek SB 2011年

@柯克SB:实际上,我没有。我倾向于忽略它们,因为每个人都会很快得到回答或关闭:-)抱歉
gbn

我想在SO上看到那些类似的问题,如果有人可以找到一个链接。我来这里是因为我在那里找不到问题,而且我确定已经有人问过这个问题。我立即发现了这个问题。
Nicholas Shanks

这是关于程序员的。一个适合您的大面包比赛... programmers.stackexchange.com/questions/114728/…–
gbn

6

下一本书谈论使用ID作为SQL反模式,我同意作者的看法。 http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1330025134&sr=1-1

当您要执行复杂的报告并且需要多个ID(然后必须使用别名)时,这是一个特殊的问题。使用表名ID还可以更容易地识别要加入的正确FK(因为它们具有相同的名称),并且可以减少因加入错误的事物而导致的错误。

就是说,许多数据库不支持USING语法,这使您对这些数据库提出的问题不成问题。许多数据库也不支持使用自然连接,即使连接可能改变,我也不建议使用自然连接表结构是否改变。因此,假设您在两个表中都添加了一个名为Modifyeddate的字段,则您不想在该表上进行联接,但是自然联接会这样做。


4

最好使用联接存在的表达式显式地给表名称和列名称(例如Employees.EmployeeID)

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.