0

在我昨天问的一个问题中:-

SQL SELECT DISTINCT 谜题

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

4

3 回答 3

1

你参考这个:

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

这样做的问题是语义相同的列在两个表中具有不同的名称。不管它是什么,建议都是一样的,以便能够更好地阅读您的脚本。当你试图记住所有这些时,你必须做很多额外的思考,如果你不遵守这个规则,随着桌子的数量开始增长......

于 2012-10-17T12:59:51.807 回答
0

看那个问题,我猜想评论不是关于列 TypeID 的名称,而是关系是一个名为 Type 的列和一个名为 TypeID 的列之间的关系。不想把话放在发表评论的人的嘴里,我看到了这些问题:

  1. Type很可能是保留字,现在或将来。通常,应避免使用在编程语言或数据库模型中具有共同含义的词。
  2. 当您有一列是某事物的 ID(在本例中为 a Type)和另一列是事物本身时,很难理解这种关系是否正确发生。在这种情况下,不清楚是否Type持有 ID 或类型的名称。如果 FK 端的列引用 TypeID 列,它至少应该包含名称 TypeID。

与命名约定不直接相关的其他问题:

  1. 如果您的系统包含文档以外的其他内容,TypeID 将不会成为一个非常具有描述性的名称。也许 DocTypeID 会更清楚,尤其是在关系的外键方面。
  2. 您可以认真考虑从文档类型列表中完全删除 TypeID 列,并简单地使用类型名称作为主键。只要这些不是可变的,它就会在您需要类型名称但不需要类型表中的其他信息时为您保存一个 JOIN。
于 2012-10-17T13:01:02.237 回答
0

真的只有那个用户可以回答,因为“糟糕的命名约定”是他的个人意见。有问题的行是这个

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

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

LEFT JOIN Document d on dt.TypeID=dt.TypeID
于 2012-10-17T13:01:06.607 回答