我已经阅读了一条说明以下内容的原则:“每个数据元素都应该在数据库模式中具有唯一的名称。”(http://bytes.com/topic/sql-server/answers/439341- name-keyword)你如何强制执行?
通常的技术包括在列的有意义名称前放置三个字符的缩写。因此,Employee.Name成为Emp_Name。到现在为止还挺好。但是,Employer.Name也应该成为Emp_Name。因此,我必须为Employer提出一些含义不明确的缩写。比方说,“Eml”。而且,随着架构变得越来越大,必须投入越来越多的努力来避免碰撞。
在我看来,一个好的折衷方案是始终使用合理的前缀。这样,我们可以避免大部分碰撞,而不使用不直观的缩写 - 比如雇主的“Eml”。
答案 0 :(得分:1)
要求每个数据元素都具有唯一名称,不应被解释为每个具有唯一名称的列。
外键特别应该根据它们引用的表具有相同的名称。因此,CustomerID
无论发生在何处都意味着同样的事情。它将是对Customer
表的主键的引用。我会在表CustomerID
中调用主键,但有时我也会将其视为ID
。
还有一些其他案例是重复的名称是可以的。我创建的所有表都在每行上都有元数据,描述了创建行的时间和创建者。这些分别称为CreatedAt
和CreatedBy
。这些都在所有表中,但不是逻辑数据模型的一部分。
另一种重复名称的情况是有效的,并且在缓慢变化的维度上结束日期。通常只需调用这些EffDate
和EndDate
(或其他),而不是尝试使它们成为唯一的。
最后,我使用涉及多个临时表的数据流方法进行了大量处理。为了跟踪目的,我故意保持列名相同。
但是,您的问题的答案是使用与表相关的前缀。该表唯一的数据元素可以有一个简短的前缀,因此我们知道它们是什么。例如,Cust_Name
和Addr_City
是客户表中客户名称和地址表中城市名称的合理名称。