我使用Rails已经有几年了,我已经习惯了将主键列命名为id的惯例。但是,我在SQL书中遇到了许多命名主键列的示例,例如,对于employees表,类似于employee_id;对于feeds表,类似于feed_id。
第二个系统的一个优点似乎是你可以更多地使用USING()来生成更简洁的查询:
select feeds.title, items.title from items inner join feeds USING(feed_id);而不是
select feeds.title, items.title from items inner join feeds on feeds.id = items.feed_id;哪种命名约定更好?哪个更受有经验的数据库管理员的青睐?
另外,表的名称是复数形式更好吗?
发布于 2011-06-25 00:00:42
Tablename_Id是我的强烈偏好。当您连接到Fks时,您确切地知道要连接到什么,并且不要在表a中连接到ID时出错。下面的tableb示例说明了这是多么容易做到,特别是当您从其他地方复制on子句时。
FROM tablea a
JOIN tableb b
ON a.ID = b.tableaid
JOIN tablec c
ON a.ID = c.tablebid在上面的例子中,你真的很想加入B.Id,但是在你复制的时候忘记了修改。它会正常工作,并给出一个不正确的结果集。如果改用table_id,则查询将无法通过语法检查。
使用Id的另一个问题是当你在做复杂的报表时。由于repport查询必须包含具有单个名称的字段,因此如果您使用表名命名id,则可能会浪费时间编写一堆不需要的别名。
现在使用ORM的人不会写很多SQl,但是他们写的和报表作者写的通常都是非常复杂的语句。你需要设计你的数据库,让它比简单的查询更容易做这些事情。
使用ID作为标识字段的名称被视为SQl反模式。http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1308929815&sr=1-1
发布于 2011-06-24 23:13:13
我总是使用冗长的形式(即'employee_id‘而不是'id'),因为它更具描述性。如果您要连接多个表,并且这两个表都有'id‘列,那么如果您需要同时选择这两个id,则必须使用'id’作为别名。此外,正如您所提到的,您将获得使用子句的优势。从总体上看,这不是一个很大的因素,但更冗长的形式会给你带来好处。
发布于 2011-06-24 23:14:50
这两个选项都是有效的,但是纯粹主义者会说使用id,因为它的名称是由表指定的。
我使用table_id是因为我发现它更具描述性,并且使调试更容易。它更实用。
回复:表名。这是数据库书呆子们热议的另一个话题,但我说是奇特的。
https://stackoverflow.com/questions/6469730
复制相似问题