0

我读过一个原则,该原则声明如下:“每个数据元素在数据库模式中都应该有一个唯一的名称。” (http://bytes.com/topic/sql-server/answers/439341-name-keyword) 你是如何执行的?

通常的技术包括在有意义的列名称之前放置一个三字符的缩写。因此,Employee.Name 变为 Emp_Name。到目前为止,一切都很好。但是,Employer.Name 也应该成为 Emp_Name。所以,我必须想出一些没有意义的神秘的雇主缩写。比方说,“Eml”。而且,随着 Schema 变得越来越大,必须付出越来越多的努力来避免冲突。

在我看来,一个好的折衷方案是始终使用合理的前缀。通过这种方式,我们避免了大部分冲突,而无需使用不直观的缩写词——比如 Employer 的“Eml”。

4

1 回答 1

1

每个数据元素具有唯一名称的要求不应解释为每个列都具有唯一名称。

特别是外键应该根据它们引用的表具有相同的名称。所以,CustomerID无论它发生在哪里,都意味着同样的事情。这将是对表的主键的引用Customer。而且我会调用表中的主键CustomerID,尽管有时我也认为它只是ID

还有其他一些情况,重复名称是可以的。我创建的所有表的每一行都有元数据,描述了创建该行的时间和人员。这些被分别称为CreatedAtCreatedBy。这些在所有表中,但不是逻辑数据模型的一部分。

想到的另一种重复名称的例子是在缓慢变化的维度上的有效和结束日期。通常只调用这些EffDateEndDate(或其他)更简单,而不是试图使它们独一无二。

最后,我使用涉及多个临时表的数据流方法进行了大量处理。为了跟踪目的,我非常有意地保持列名相同。

但是,您的问题的答案是使用与表相关的前缀。该表唯一的数据元素可以有一个短前缀,因此我们知道它们是什么。例如,Cust_NameAddr_City是客户表中的客户名称和地址表中的城市名称的合理名称。

于 2013-01-22T14:20:41.003 回答