我想爲餐廳銷售交易建立一個事實表。將整個事實表加起來就可以得到整個餐廳的整個銷售額。這家餐廳有兩大收入來源 - 食品和飲料。每個的尺寸都非常不同。維度建模 - 如何處理具有不一致維度的事實的單個事實表?
例如,對於食物,我可能想要追蹤它是否不含乳製品,無麩質等。或者我可能想看看這道菜是意大利,法國等。對於葡萄酒,我可能會對葡萄酒,葡萄酒的來源,葡萄酒是什麼。
如何用一張事實表完成此操作?如果物品是食物,我是否應該簡單地將葡萄酒維度設置爲NULL;如果物品是葡萄酒,則維度是否爲NULL?
我想爲餐廳銷售交易建立一個事實表。將整個事實表加起來就可以得到整個餐廳的整個銷售額。這家餐廳有兩大收入來源 - 食品和飲料。每個的尺寸都非常不同。維度建模 - 如何處理具有不一致維度的事實的單個事實表?
例如,對於食物,我可能想要追蹤它是否不含乳製品,無麩質等。或者我可能想看看這道菜是意大利,法國等。對於葡萄酒,我可能會對葡萄酒,葡萄酒的來源,葡萄酒是什麼。
如何用一張事實表完成此操作?如果物品是食物,我是否應該簡單地將葡萄酒維度設置爲NULL;如果物品是葡萄酒,則維度是否爲NULL?
你的事實可能看起來像這樣?
SALES_LINE_ITEM_FACT
TRAN_DATE
TRAN_HOUR (or other time buckets if needed)
SERVER_KEY
TABLE_KEY
SEAT_KEY
PROMOTION_KEY
PRODUCT_KEY
REGULAR_PRICE
NET_SALE_PRICE
PRODUCT_COST
你的「產品」維度是,你需要將注意力集中於,如果你想從一個銷售事實有多少人訂購了特定的葡萄酒報告。
首先,它可能只是看起來像:
PRODUCT_DIM
PRODUCT_KEY
PRODUCT_NAME
PRODUCT_CATEGORY (food/beverage)
PRODUCT_SUBCATEGORY (wine/beer/dairy/french/italian etc)
CURRENT_AVERAGE_PRODUCT_COST
您既可以添加詳細信息的分類層級另一個層面,或者如果你想要做更詳細的分析,爲特定的雪花某些產品類型並將它們連接到產品變暗。
如果您確實想要將產品分解爲「食品」和「飲料」維度,則只需將相應的項目清空即可。然而,這樣做會讓你失去兩者之間的共同點(也許你有「供應商」提供食品和飲料?) –
數據庫規範化如何?通常不是一個好主意,有一個巨大的表,其中包含所有字段 – gtgaxiola
這將已經相對正常化(星型模式結構)...只是好奇這是什麼'最佳實踐'是這種情況,因爲我確信它非常普遍 –
@gtgaxiola星型模式是用於報告的非規範化結構!你應該抵制將它們歸一化的衝動!無論如何,事實表只會是每個維度的一堆鍵,甚至數百萬行也是非常好的。 –