Normalization

更新後如何維護舊資訊?

  • July 11, 2014

我在尋找不失去舊資訊的解決方案時遇到問題。

例如,客戶可以下許多訂單。假設一位客戶 Mary 在 2013 年下了第一個訂單。快進到 2014 年,Mary 更新了她的地址並下了一個新訂單。這第二個訂單將反映新的變化,但第一訂單也將反映。如何保留第一個訂單的舊客戶資訊?每當客戶更新他們的資訊時,我是否應該創建新的客戶記錄?

顧客

+-----+--------+--------+-------------------+-----------+----------+
| 編號 | 名稱 | 姓名 | 地址 | 上次更新 |
+-----+--------+--------+-------------------+----------------------+
| 1 | 瑪麗 | 簡 | 123 一些聖。| 2014-07-10 01:20:00 |
+-----+--------+--------+-------------------+----------------------+

命令

+----+-------------+---------------------+---------------------+
| 編號 | 客戶 ID | 訂單日期 | 交貨日期 |
+----+-------------+---------------------+---------------------+
| 1 | 1 | 2013-04-01 13:00:00 | 2013-04-01 16:00:00 |
| 2 | 1 | 2014-07-10 01:30:00 | 2014-07-10 02:00:00 |
+----+-------------+---------------------+---------------------+

您創建一個額外的表,其中包含客戶 ID 和所有其他可能會隨時間變化的欄位。

在orders 表中,您連結到這個新表的id,而不是customers 表。

customers(customer_id, first_name, last_name...)
customer_info(id, customer_id, address, other field)
orders(id, customer_info_id, order_date, ...etc)

這就是為什麼你不應該使用如此簡單的模式:)

請參閱現成的數據庫模型範例以獲取參考列表。

地址應該是它自己的實體。

People -< PeopleAddresses >- Addresses

Sales Order指向地址的點(如Billing Address)和Sales Order Line Items指向地址的點(如ShipTo Address)。不是那個人。

不要讓人們刪除或修改地址。他們可以要求更正。

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