sql - 命名主键列ID或* _id更好吗?

标签 sql

我已经使用Rails几年了,已经习惯了命名主键列id的约定。但是我在SQL书籍中遇到了很多示例,这些示例都将主键列命名为employee_id表的employeesfeed_id表的feeds

第二系统的一个优点似乎是,您可以更多地使用USING()来生成更简洁的SQL查询:

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;

哪种命名约定更好?经验丰富的数据库管理员青睐哪个?

另外,将表名复数是否更好?

最佳答案

Tablename_Id是我的强烈偏爱。当您确实连接到Fks时,您确切地知道要连接到什么,并且在表a中的ID联接位置时不会犯错,这意味着下面的表b是这种操作很容易的一个示例,特别是如果您复制on子句从其他地方

FROM tablea a
JOIN tableb b
  ON a.ID = b.tableaid
JOIN tablec c
  ON a.ID = c.tablebid

在上述情况下,您确实想加入B.Id,但忘记了复制时将其更改为a。它将起作用,并为您提供不正确的结果集。如果改用table_id,则查询将无法通过语法检查。

使用Id的另一个问题是您要处理复杂的报表。由于repport查询必须具有带有各个名称的字段,因此如果用表名命名id,您可能会浪费时间编写一堆不需要的别名。

现在,使用ORM的人并没有写很多SQl,但是他们写的东西和报告编写者写的东西通常都是复杂的,复杂的语句。您需要设计数据库,以使其比简单的查询更容易执行这些操作。

将ID用作标识字段的名称被认为是SQ1反模式。 http://www.amazon.com/SQL-Antipatterns-Programming-Pragmatic-Programmers/dp/1934356557/ref=sr_1_1?s=books&ie=UTF8&qid=1308929815&sr=1-1

关于sql - 命名主键列ID或* _id更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6469730/

相关文章:

sql - 需要从左连接的表中获取多个值

sql - Oracle 正则表达式 (REGEXP_LIKE) 太长错误 - ORA-12733

mysql - 选择日期时间和现在之间经过的毫秒数(3)

sql - 恢复的三个阶段 : the analysis phase, 重做阶段,最后是撤消阶段

mysql - SQL 查询 - 提取带有空值的查询

sql - 在路径枚举的情况下,SQL 的 LIKE 如何工作?

mysql - 仅检索关节具有依赖性的行

mysql - 尝试在 MySQL 子查询中选择唯一结果时出现问题

sql - 按最小值选择列 - 分组依据

sql - 多对多对多 SQL 模式