2016-12-15 140 views
1

我必須爲我的大學的課程設計數據倉庫模型和ETL過程。我的數據倉庫具有存儲有關產品的意見/建議,每個記錄應包括:建模數據倉庫中的多對多關係

  • 註釋文本(字符串)
  • 產品評分({0,0.5,...,4.5,5})
  • 評論作者(字符串)
  • 評論日期(日期)
  • 產品推薦({是,否})
  • 評論選票(INT)
  • 評論向下票(INT)
  • 產品的優點(多字符串,例如{價格,設計,經久耐用,...}),其計
  • 產品缺點(許多字符串,例如{聲音太大,太重,價格,...})和 其計數

另外數據倉庫應該存儲有關產品信息:

  • 產品類別
  • 產品品牌
  • 產品型號

我想先創建數據倉庫模型,但由於它是多對多關係,因此存儲產品優缺點時遇到問題。在正常的關係數據庫中,我只是簡單地創建關聯表,但在這裏我不確定如何繼續,畢竟我不想規範化事實表。

我在考慮3種方法,第一種,我在下面的圖表中提出。我用橋表方法(儘管我不知道是否正確)擺脫了多對多的關係。我不知道它將如何影響查詢性能。

ER Model

第二種方法我可以使用布爾是柱法。在PROS和CONS表格中,我可以爲每個可能的值創建一個列,但最多可以有100個不同的優點或缺點。還有一些可能的優點或缺點在時間上不是恆定的。作者在他們的評論中可以列出新的優點或缺點(這是它在數據源中的工作原理),但我不能添加新的列(我不應該更改數據倉庫中的數據)。

我正在考慮的第三種方法是保留PROS表中的專業人員,但在1列中,值將使用逗號或其他分隔符分隔,例如, 「價格,設計,顏色」。它使事情變得簡單,但很難分析或切片&骰子。

我應該在這種情況下使用哪種方法?哪個更適合將數據加載到數據倉庫中,因爲表單數據源我會得到所有的評論,而且我只想加載自上次加載後的新評論?

回答

1

我的想法是,如果我們可以讓你的第一個選項稍微修改一下比你在這裏所說的更好,那將是我理解的最好的。

在您提供的圖片中,使用Pros_Bridge_Detail表格很好。剩下的需要改變。

  • 您可以刪除僅包含計數的pros_Bridge表。您實際上可以將該列添加到您在此處的COMMENT事實表中。當涉及到查詢而不是在許多表中查詢時,這將更加高效和簡單。
  • 你說你有很多領域可以給價格,設計,耐​​久性等方面的專業人士。讓我們把這些東西放到一個單獨的維度。
  • 在您的Pros_Bridge_Detail表中添加一個新列以保存新創建的維的產品專業類型(設計,耐用性等)的ID。 現在,一旦您添加產品專業版,Pros_Bridge_Detail表將爲用戶提供專業人員,並保持關於通過新維度的ID給予專業人員的價值。
  • 另外,不要忘記將評論ID存儲在Pros_Bridge_Detail表中,因爲這將成爲您的評論事實表的鏈接(FK)。

同樣可以對Cons做同樣的事情。

希望你明白我剛剛解釋的內容,並希望它有所幫助。讓我們知道你是否有任何問題。