表字段命名约定和SQL语句

mar*_*lon 6 sql

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

student (id int; name varchar(30))
teacher (id int, s_id int; name varchar(30))
Run Code Online (Sandbox Code Playgroud)

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

  1. 使用表名作为SQL'where'子句中字段的前缀
  2. 在表中使用前缀字段名称,以便在'where'子句中不使用前缀.

哪一个更好?

Bam*_*fer 2

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

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

这些事情值得仔细思考,但最终一致性可能是更重要的因素。我可以处理围绕id而不是构建的表student_id,但我目前正在使用不一致的架构,该架构使用以下所有内容:idsidsystemid特定名称,例如taskid. 这是两全其美的最糟糕的情况。