带有下划线或句点的SQL id列

时间:2014-07-14 14:01:46

标签: sql database postgresql

我像这样创建表格:

CREATE TABLE account (
  id serial PRIMARY KEY,
  username varchar (32),
  email varchar (255)
)

SELECT的{​​{1}}查询看起来像这样(我必须在这里使用句点,因为两列中都存在id列):

JOIN

我见过其他人在列名中创建了包含表名的表(包括下划线):

SELECT account.id, name 
FROM account 
JOIN activity ON activity.account_id = account.id

查询将如下所示:

CREATE TABLE account (
  account_id serial PRIMARY KEY,
  username varchar (32),
  email varchar (255)
)

使用下划线变体有什么好处吗?有性能差异吗?关于这个问题有没有最佳实践?

2 个答案:

答案 0 :(得分:2)

使用完整的标识符名称可以使用using子句使标识符明确无误

select account_id, name
from
    account
    inner join
    activity using (account_id)

您的第二个查询会出现名称不明确的错误

SELECT account_id, name 
FROM account JOIN activity ON activity.account_id = account.account_id

http://www.postgresql.org/docs/current/static/sql-select.html#SQL-FROM

全名的另一个优点是,您希望客户端使用多个表中的ID。如果标识符仅以id命名,则需要创建别名:

select
    account.id as account_id,
    activity.id as activity_id,
    name 
from
    account 
    inner join
    activity on activity.account_id = account.id

答案 1 :(得分:1)

不会有任何性能差异。我能想到的唯一实用差异是你不必在每个查询上输入完整的列名 - 只有那些连接到具有不明确列名的表的人才

可能对你有帮助的另一件事是表别名:

SELECT 
    a.id, 
    name 
FROM account a 
JOIN activity b
ON a.id = b.account_id 

但除此之外,这纯粹是个人偏好。出于各种原因,我见过团队将两者都用作“标准”。我猜想程序员喜欢较短的名字以减少输入,而管理员在进行故障排除时更喜欢显式名称以获得更多上下文。