2012-11-04 66 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 –