2012-11-04 36 views
7

我一直在看微软的Adventure Works 2012数据库。如果有任何信息可以解释为什么创建表格,我会非常感兴趣。我猜想某种模式概述。冒险作品解释

例如:

他们为什么选择创建一个BusinessEntity表作为一种对人,员工的基类等

大部分数据进行归一化,为什么他们选择把CountryRegionCode字段放入StateProvince表中,而不是一个ID到一个单独的表中。

无论如何,我对进一步了解进入数据库设计的决策非常感兴趣。任何人都知道进入这种事情的资源?

回答

7

我不知道AdventureWorks的任何官方设计文档,但我用作培训师,并广泛使用AdventureWorks数据库进行演示和实验,所以我对它很熟悉。

BusinessEntity表是SuperType/SubType设计的经典案例,它减少了数据冗余,因为客户也可以成为供应商,员工可以成为客户,以及其他任何组合。而且,这意味着您不会将与所有实体相关的详细信息反复存储在单独的表中,从而最大限度地减少代码更改时的工作量。

的CountryRegionCode我不看好,但我怀疑的三个原因之一:

  1. 没有足够的不同组合在报告性能为代价,有必要进行额外的表(这可以通过验证一些简单的COUNT(*)GROUP BY语句)
  2. 他们希望它在同一张表中,以便将来他们可以灵活地用hierarchyID建模一个层次结构(这是最不喜欢的选项)
  3. 这是一个标准化错误! (我的钱是这个选项!)
+0

谢谢你的见解。 – user1705507

3

此图片帮助我,即使它在技术上是在2008年

+0

我一直在寻找图表,并在官方网站上找到它(不知道它是否是相同的版本思想):http://www.microsoft.com/en-us/download/details.aspx?id=10331 –