SQL表/列命名约定

时间:2012-10-17 12:55:57

标签: sql sql-server database

昨天我问的一个问题: -

SQL SELECT DISTINCT Puzzle

用户spectralghost提到我的列名(egTypeID)是一个糟糕的命名约定。你们能否详细说明为什么会这样,让我知道应该为表格和列使用什么样的命名约定?

3 个答案:

答案 0 :(得分:1)

你指的是:

LEFT JOIN Document d on dt.DocumentType=dt.TypeID --terrible naming convention.... 

问题在于语义相同的列在两个表中具有不同的名称。无论是什么,建议都是一样的,以便能够更好地阅读您的脚本。当你不遵守这条规则时,你需要做很多额外的思考,如果你不遵循这个规则,那么表的数量会开始增长......

答案 1 :(得分:0)

看一下这个问题,我猜这个评论不是关于列TypeID的名称,而是关系是名为Type的列和一个名为TypeID的列之间的关系。我不想在发表评论的人的口中说出这些问题,我看到了这些问题:

    现在或将来,
  1. Type可能是保留字。通常,应避免在编程语言或数据库模型中具有共同含义的词语。
  2. 当你有一个列是某个东西的ID(在这种情况下是Type)而另一个列就是这个东西时,很难理解这种关系是否正确发生。在这种情况下,不清楚Type是否包含ID或类型的名称。如果FK端的列引用TypeID列,则它至少应包含名称TypeID。
  3. 与命名约定无直接关系的其他问题:

    1. 如果您的系统包含除文档之外的其他内容,则TypeID不会成为一个非常具有描述性的名称。也许DocTypeID会更清晰,特别是在关系的外键方面。
    2. 您可以认真考虑从文档类型列表中完全删除TypeID列,只需使用类型 name 作为主键。只要这些不可变,只要您需要类型名称而没有类型表中的其他信息,它将为您保存JOIN。

答案 2 :(得分:0)

真的只有那个用户可以回答,因为'糟糕的命名惯例'是他的个人观点。有问题的一行就是这个

LEFT JOIN Document d on dt.DocumentType=dt.TypeID --terrible naming convention....

我认为他的意思是外键在两个表中应该具有相同的名称 - 而不是DocumentType,该字段应该被命名为TypeID,因此该行将被读取

LEFT JOIN Document d on dt.TypeID=dt.TypeID