表字段命名约定和SQL语句

时间:2016-02-22 22:17:25

标签: sql

我有一个关于在数据库中命名表字段的实际问题。例如,我有两个表:

student (id int; name varchar(30))
teacher (id int, s_id int; name varchar(30))

两个表中都有'id'和'name'。在SQL语句中,如果没有前缀的表名,则两者将不明确。两个选项:

  1. 使用表名作为SQL'where'子句
  2. 中字段的前缀
  3. 在表中使用带前缀的字段名称,以便在'where'子句中不使用前缀。
  4. 哪一个更好?

4 个答案:

答案 0 :(得分:3)

毫无疑问,请使用选项1.这是任何类型的数据库中的有效sql,并被认为是正确且最易读的格式。将表名称添加到列的前缀是一个好习惯,在进行连接时非常必要。我经常看到的唯一例外是在id列前加上表名,但我仍然不会这样做。
如果你选择选项2,经验丰富的DBA可能会指责并嘲笑你 有关进一步证明,请参阅此处的#2:https://www.periscopedata.com/blog/better-sql-schema.html
和这里。规则1b - http://www.isbe.net/ILDS/pdf/SQL_server_standards.pdf

正如TT所提到的,如果您学习如何使用alias作为表名,那么您将使您的生活更轻松。它就像在查询中使用SomeTableNameThatsWayTooLong as long_table一样简单,例如:

SELECT LT.Id FROM SomeTableNameThatsWayTooLong AS LT

答案 1 :(得分:3)

对于非ad-hoc的查询,您应该始终为每个字段添加表名或表别名,即使字段名称不明确。如果有人向其中一个引入歧义的表添加新列,这可以防止查询稍后中断。

这样就可以使“id”和“name”明确无误。但我仍然建议用比“id”更具体的东西来命名主键。在您的示例中,我将使用student_idteacher_id。这有助于防止连接中的错误。当您遇到具有多个唯一键或多部分键的表时,无论如何都需要更多特定名称。

值得思考这些事情,但最终一致性可能是更重要的因素。我可以处理围绕id而不是student_id构建的表格,但我目前正在处理使用以下所有内容的不一致架构:idsid,{ {1}}和systemid等具体名称。这是两个世界中最糟糕的。

答案 2 :(得分:2)

我会使用别名而不是表名。

您可以为查询中的表分配alias,该表比表名短。这使查询更具可读性。例如:

SELECT 
    t.name AS teacher_name,
    s.name AS student_name 
FROM 
    teacher AS t 
    INNER JOIN student AS s ON 
        s.id=t.s_id;

如果你不使用别名,你当然可以使用表名,这比你的选项2更受欢迎。

答案 3 :(得分:0)

如果它不会太长,我更喜欢在表格中添加前缀,例如: teacher.teacher_id,student.student_name。这样,您总是可以确定您正在谈论的名称或ID,即使您为表名添加前缀也是如此。