冒险作品解释

use*_*507 9 sql t-sql sql-server adventureworks

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

例如:

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

大多数数据都已标准化,因此他们选择将CountryRegionCode字段放入StateProvince表中而不是将ID 放入单独的表中.

无论如何,我非常有兴趣了解有关数据库设计决策的更多信息.有人知道这类资源吗?

Pet*_*ter 8

我不知道AdventureWorks的任何官方设计文档,但我曾经是一名培训师,并且大量使用AdventureWorks数据库进行演示和实验,因此我对它非常熟悉.

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

CountryRegionCode我不是正面的,但我怀疑有以下三个原因之一:

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


Dav*_*veX 6

即使在技术上是2008年,此图像也对我有所帮助。