遵循这样的命名约定的一大好处:它有助于使错误的 SQL 语句“看起来不正确”。
(Joel Spolsky 的这篇博文“让错误的代码看起来是错误的”并未提及 SQL,但我认为您询问的 SQL 命名约定遵循 Joel 所支持的相同原则。)
http://www.joelonsoftware.com/articles/Wrong.html
规范连接是外键到主键。
当我们遵循使用id作为主键的命名约定,并使用tablename_id(在外键列名的末尾加上_id)时,会导致SQL如下所示:
FROM user
JOIN post
ON post.user_id = user.id
这是一个非常熟悉的模式:代理主键的名称为 id,外键列的名称为 <referencedtable>_id,有时是 <referencedtable>_<role>_id。
查看此 SQL,我们预计 post 表中的 user_id 列是对 user 表中的 id 列的外键引用。当我们虔诚地遵循这种风格命名约定时,不遵循这种模式的 SQL 就会显得“错误”。
举个例子,比较一下:
FROM somedoohickey
JOIN gibberish
ON troubador = minstrel
到:
FROM somedoohickey s
JOIN gibberish g
ON g.id = s.gibberish_id
两者都可能是同样有效的 SQL。但第二种模式向读者传达了更多信息。当我们习惯了命名约定时,前者对我们来说只是看起来“错误”,也就是说,我们怀疑可能有问题。
比较一下:
FROM somedoohickey s
JOIN gibberish g
ON g.id = s.undecipherable_id
看起来有些不对劲。甚至
FROM somedoohickey s
JOIN gibberish g
ON g.id = s.gibberish
再一次,有些东西看起来不太对劲。