Data-Warehouse

基於產品類型的產品屬性維度 - 稀疏維度?

  • February 21, 2022

我正在為銷售事實創建產品屬性維度。

產品的屬性取決於產品類型。例如: - 類型 = 智能手機。屬性 = 型號、作業系統、大小 - 類型 = 書籍。屬性=作者,標題

這種情況下的尺寸應該是多少?

我應該創建包含所有屬性的維度嗎?在這種情況下,維度內容將是稀疏的,會有很多空值。

|----------------------------------------------------|
| DimKey | Type | Model | OS | Size | AUTHOR | TITLE |

或者,我應該為每個創建維度嗎?在這種情況下,銷售事實將有許多 FK。

|-------------------------------------------------------------|
| FactKey | Quantity | Total | Book_FK | Smartphone_FK | .... |

有沒有其他方法可以做到這一點?

我不會為每種產品類型創建單獨的外鍵。這被稱為蜈蚣事實表。

http://www.kimballgroup.com/data-warehouse-business-intelligence-resources/kimball-techniques/dimensional-modeling-techniques/centipede-fact-table/

我會考慮為可以在邏輯上分組的產品創建單獨的事實表。即 FactTechnologySales、FactBookSales。然後您將擁有 DimTechnologyProducts 和 DimBooks 維度。這將最小化維度表中的 NULL 欄位。(請注意,我實際上會用 N/A 填充這些 NULL 欄位,而不是讓它們為 NULL)。

如果您只想擁有一個事實表,則創建一個具有產品名稱、產品描述、產品類別、產品類型等屬性的產品維度。其中產品描述是智能手機的型號 + 作業系統 + 尺寸和書籍的作者 + 標題。使用“產品類別”和“類型”欄位創建一個層次結構供使用者向下鑽取。對於不適合描述的任何其他屬性,然後將它們放在垃圾維度中。

如果它那麼稀疏,我首先不會嘗試通過星型模式對其進行建模。

關於建模這樣一個維度的困難,Ben Oastler 的回答是正確的。您要麼擁有大量事實表、大量維度列,要麼將這些屬性中的大部分連接成更簡單的屬性。

然而,正是為了解決這類問題,NoSQL 解決方案才應運而生。如果您的數據不適合表結構,也許您不應該嘗試。

例如,看看 MongoDB。每個文件都是一個產品,只設置實際存在的屬性,並且可以對其進行分層。

引用自:https://dba.stackexchange.com/questions/81825