Normalization
更新後如何維護舊資訊?
我在尋找不失去舊資訊的解決方案時遇到問題。
例如,客戶可以下許多訂單。假設一位客戶 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
)。不是那個人。不要讓人們刪除或修改地址。他們可以要求更正。