如何强制我的数据库模式中的每个数据元素都具有唯一的名称?

时间:2013-01-22 13:51:37

标签: sql naming-conventions

我已经阅读了一条说明以下内容的原则:“每个数据元素都应该在数据库模式中具有唯一的名称。”(http://bytes.com/topic/sql-server/answers/439341- name-keyword)你如何强制执行?

通常的技术包括在列的有意义名称前放置三个字符的缩写。因此,Employee.Name成为Emp_Name。到现在为止还挺好。但是,Employer.Name也应该成为Emp_Name。因此,我必须为Employer提出一些含义不明确的缩写。比方说,“Eml”。而且,随着架构变得越来越大,必须投入越来越多的努力来避免碰撞。

在我看来,一个好的折衷方案是始终使用合理的前缀。这样,我们可以避免大部分碰撞,而不使用不直观的缩写 - 比如雇主的“Eml”。

1 个答案:

答案 0 :(得分:1)

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

外键特别应该根据它们引用的表具有相同的名称。因此,CustomerID无论发生在何处都意味着同样的事情。它将是对Customer表的主键的引用。我会在表CustomerID中调用主键,但有时我也会将其视为ID

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

另一种重复名称的情况是有效的,并且在缓慢变化的维度上结束日期。通常只需调用这些EffDateEndDate(或其他),而不是尝试使它们成为唯一的。

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

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