列名命名约定和最佳实践

Ker*_* SB 19 join database-design naming-convention

当涉及到列命名时,我想要一些关于最佳实践的专家意见。

背景是,根据维基百科,以下语法,

SELECT ... FROM Employees JOIN Timesheets USING (EmployeeID);
Run Code Online (Sandbox Code Playgroud)

SELECT ... FROM Employees JOIN Timesheets ON (Employees.EmployeeID = Timesheets.EmployeeID);
Run Code Online (Sandbox Code Playgroud)

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

就个人而言,我总是使用 PK columnid和外键 column来创建表othertable_id。但那样就不可能使用USINGor 了NATURAL JOIN

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

gbn*_*gbn 13

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

如果您有常见且非常含糊的名称,则使用表名作为前缀。也就是说,您在几乎每个查询中都可能需要别名的任何内容。

所以对于 Employee 表,我有

EmployeeID
EmployeeName
Comment
Salary
StartDate
EndDate
InsertedDateTime
...
Run Code Online (Sandbox Code Playgroud)

维基百科实际上说:

然而,USING 构造不仅仅是语法糖,因为结果集不同于具有显式谓词的版本的结果集。具体来说,USING 列表中提到的任何列将只出现一次,并且名称不合格,而不是对于连接中的每个表出现一次。

那是少一列。SELECT *无论如何你永远不会使用所以这一点没有实际意义......


HLG*_*GEM 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 语法,这使得您提出的问题对于这些数据库来说不是问题。许多数据库也不支持使用自然连接,我不建议在任何情况下使用自然连接,因为它们连接可能会改变如果表结构发生变化。因此,假设您向两个表添加了一个名为 modifieddate 的字段,您不希望在该字段上进行连接,但自然连接会这样做。