Database-Design

事實度量的類型 2 維度

  • February 23, 2021

我需要儲存產品及其價格和數量(以及許多其他內容)並跟踪歷史記錄。

現在,鑑於價格和數量都儲存為整數,我的理解是這些都是事實衡量標準。所以我們可能有一個像這樣的表:

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 列儲存在同一個表中並稱之為一天(除非它們彼此非常不相關,那麼我可能會對其進行規範化)。擁有完整的欄位列表可能會影響不同的答案,您的方法也是有效的。保持這種方式可能需要更多的工作。

本質上它將是一個事務表,並為任何欄位的每次更改記錄一條記錄。然後最容易查看給定產品的目前狀態是什麼,或者它在給定時間範圍內的狀態是什麼。

是的,您會遇到一些數據重複,但大多數現代數據庫系統無論如何都會自動壓縮它們的表。因此,除非您認為您將每天創建數十億筆交易並開始涉足大數據領域,否則從性能的角度來看,我不會非常擔心。

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