12

我一直在查看 Microsoft 的 Adventure Works 2012 数据库。如果有任何信息解释为什么要按原样创建表,我会非常感兴趣。我猜是某种架构概述。

例如:

为什么他们选择创建一个BusinessEntity表作为 Person、Employee 等的一种基类。

大多数数据都是标准化的,所以为什么他们选择将CountryRegionCode字段放入StateProvince表中,而不是将 ID 放入单独的表中。

无论如何,我非常有兴趣了解更多有关数据库设计决策的信息。任何人都知道进入这种事情的资源?

4

3 回答 3

12

我不知道 AdventureWorks 的任何官方设计文档,但我曾经是一名培训师,并且在演示和实验室中广泛使用 AdventureWorks 数据库,所以我非常熟悉它。

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

CountryRegionCode 我不赞成,但我怀疑以下三个原因之一:

  1. 没有足够的不同组合来保证以报告性能为代价的附加表(这可以通过一些简单的 COUNT(*) GROUP BY 语句来验证)
  2. 他们希望它在同一个表中,以便将来他们可以灵活地使用 hierarchyID 对层次结构进行建模(这是最不可能的选项)
  3. 这是一个标准化错误!(我的钱在这个选项上!)
于 2012-11-04T19:39:06.290 回答
10

这张图片帮助了我,尽管它在技术上是 2008 年的。

于 2016-04-20T15:31:50.280 回答
1

这是一个在背景上填写一点的链接:

https://technet.microsoft.com/en-us/library/ms124825(v=sql.100).aspx

于 2017-01-19T08:41:51.880 回答