Database-Design

是否可以儲存每行數據的歷史配置設置,而無需將所有配置設置塞進每行數據?

  • February 5, 2021

背景:我最近被一家水處理公司聘為數據庫工程師。我們在全國各地部署水處理機器,機器處理水並將有關進水狀態(流量、溫度、進水中 X 濃度等)的連續數據發送回給我們,以及有關處理的數據機器在那個時間點應用於那個水。隨著時間的推移,場地(及其各種組件)會發生很大變化:機器可能會發生故障並需要更換,可能會使用不同濃度的化學物質來填充機器的水箱,可能會重新校准或設置其流量計和其他感測器為了實現不同的規模,它的化學泵可能會被更換,並且不斷地更換。這些會影響數據的解釋:例如,

水處理數據點由包含站點 ID 和時間戳的複合鍵標識。如果唯一重要的數據是目前數據,那麼儲存配置會很容易,因為我可以將配置設置保留在 Site 表中,並根據需要將它們拉出用於數據點。但我們需要能夠正確解釋舊數據。因此,我考慮將配置儲存在自己的表中,該表將跟踪每個站點在每個時間段內的所有設置,但不可能在數據點的連續時間戳和開始/結束日期之間創建外鍵配置 - 最接近的是某種範圍檢查,例如“Datapoint.TimeStamp BETWEEN Configuration.Start AND Configuration.End”。

那麼,有沒有辦法以完全標準化的方式儲存每行數據的歷史配置,或者是將所有設置塞進每個數據點的唯一可能解決方案?

您所描述的內容稱為漸變維度(SCD),每個配置項本質上都是測量(事實)的維度。如果您不想切換到支持時態查詢的數據庫,您仍然可以在 MySQL 中實現其中一種 SCD 方法(無論如何,時態表仍然在幕後工作)。不需要聲明為外鍵,作為連接條件使用Datapoint.TimeStamp沒有錯。Datapoint.TimeStamp BETWEEN Configuration.Start AND Configuration.End

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