[英]Relational Databases: Current Data vs. Historical Data, best Practice
我們來看一個關系數據庫,例如MySQL。 為了簡單起見,我將集中精力處理重要的事情:擁有一個包含訂單的表,其中包含order_id
(主鍵) order_date
和外鍵fk_supplier等字段,它們引用表supplier
的主鍵。 該表還有一個名為supplier_name
的字段。 現在,讓我們想象一下,有一個php網站顯示了在表格中生成的所有訂單。 該表的每一行由order_id
, order_date
和supplier_name組成(sql語句在兩個表上建立了連接)。 到目前為止一切都還好。 現在,有人更改了其中一個訂單中引用的一個供應商的名稱:歷史數據變得不真實或錯誤。 我的問題是:為了防止這種情況,最佳做法是什么? 我想到了三種解決方案:
所有這些方法都有優點和缺點。 例如,點2似乎非常臟,並且違反了關系數據庫的所有規則。 在我看來,第3點通常是要走的路。 但需要付出很多努力,編程明智。 用戶體驗/可用性也非常糟糕。
我想知道,經驗豐富的開發人員和數據庫設計人員如何處理這個問題。
選項3的一種形式,其中有關於供應商信息的StartDate和EndDate。 這樣,數據在所有時間都是准確的(供應商名稱在給定時間是正確的)。 您還可以做的一件事是創建一個電子表格,其內容每晚都會加載到具有Supplier信息的數據庫中(到fact_Supplier表或查找表中)。 對供應商的所有編輯都要通過此電子表格,只有那些負責此類事情的精選人員才能訪問。 如果電子表格中有更改,則“供應商”表中的先前信息將結束日期,並且新記錄將隨新信息一起插入。 任何改變都會發生這種情況,供應商名稱,供應商地址等。
將擴展我的評論:
我會選擇選項2,但稍作修改:
優點:
缺點:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.