2014-10-10 90 views
0

我正在將我的第一步移到數據倉庫中。建模事實表需要幫助

我已經通過Kimball & Ross購買了優秀的書籍「The Data Warehouse Toolkit - Third Edition」,它解釋了我如何理解基本概念。
今天我開始設計我的第二個數據集市,但我已經陷入了一個(也許是愚蠢的)問題。假設我是造型簡單的銷售活動:一個簡單的事實表將是:

DATE_ID | CUSTOMER_ID | PRODUCT_ID | QUANTITY 

每個維度與其他一個多一對多的關係,在這本書和網絡上的解釋。
接下來,我想添加一些更多的維度,像載體:

DATE_ID | CUSTOMER_ID | PRODUCT_ID | CARRIER_ID | QUANTITY 

尺寸仍處於許多一對多的關係。
現在,我被要求添加很多(可能是一打或更多)關於交付的細節,比如一堆日期,路由,箱子和托盤的數量,各種標誌等等,所以我在考慮DELIVERY維度表。我的第一次嘗試是:

DATE_ID | CUSTOMER_ID | PRODUCT_ID | CARRIER_ID | DELIVERY_ID | QUANTITY 

但是......令人驚訝的是,事實表現在它不再處於多對多的關係。所以我想:「哎,我可以重構它,因爲現在其他尺寸的交付的事實屬性」,但它會成爲

DELIVERY_ID | PRODUCT_ID | QUANTITY 

和我的事實表就只需要2個維度。
現在,在其他情況下,我會像對待交付作爲一個退化的維度,但因爲我有關聯到了很多attibutes的,我不知道哪條路線遵循:

  • 創建交貨維和重構事實表?
  • 把它們扔在事實表中?
  • 創建DELIVERY維度並將DELIVERY_ID放入事實表中,假裝它只是一個退化維度?

也許當你形容它不是那麼簡單的維和事實

+0

更多的空閒資源中被鏈接[該SO回答](http://stackoverflow.com/a/7711243/562459)。 – 2014-10-11 17:29:22

回答

1

之間做出選擇,交付是對於銷售一個單獨的事件。所以交付應該是一個單獨的事實表。

當然,如果你不需要增加複雜性,你總是可以在某個維度上「投射」(可以這麼說)事實。例如,假設您只需要知道一些關於交貨的簡單事實:例如承運人和交貨日期。然後,您可以在SALES中使用DELIVERY_ID,並在DELIVERY維度中註冊這些信息。

但是,如果你要註冊一個交付的全部複雜性(可能有兩個或兩個以上的交付相對於一個銷售,以及兩個或更多的銷售相對於一個交貨),你需要兩個事實表。用於從IBM紅皮書數據倉庫設計