Database-Design
事實度量的類型 2 維度
我需要儲存產品及其價格和數量(以及許多其他內容)並跟踪歷史記錄。
現在,鑑於價格和數量都儲存為整數,我的理解是這些都是事實衡量標準。所以我們可能有一個像這樣的表:
f_products: id sku price quantity
由於價格隨時間變化,我們可以插入一個新的事實,我可以在表中引入有效日期,以便查詢給定時間的價格或數量。
但在這種設計中,如果數量發生變化,我必須插入另一行,再次重複不變的價格值。雖然這對於 2 列來說還不錯,但實際上我有 10 列。
所以,我的設計是:
f_products: id sku price: id product_id price start_date end_date another "dimension": id product_id value start_date end_date and so on
現在,當價格發生變化時,“事實”不再需要改變,我可以查詢這些表中的歷史值。
所以我的問題是,這似乎不符合標準的事實/維度設計,所以我想知道更有經驗的建模者會如何處理這些要求。
老實說,這真的取決於你的案例,但對我來說,我可能只是將所有 10 列儲存在同一個表中並稱之為一天(除非它們彼此非常不相關,那麼我可能會對其進行規範化)。擁有完整的欄位列表可能會影響不同的答案,您的方法也是有效的。保持這種方式可能需要更多的工作。
本質上它將是一個事務表,並為任何欄位的每次更改記錄一條記錄。然後最容易查看給定產品的目前狀態是什麼,或者它在給定時間範圍內的狀態是什麼。
是的,您會遇到一些數據重複,但大多數現代數據庫系統無論如何都會自動壓縮它們的表。因此,除非您認為您將每天創建數十億筆交易並開始涉足大數據領域,否則從性能的角度來看,我不會非常擔心。