[英]Maintaining data integrity in mysql when different applications are accessing it
[英]Maintaining order data integrity with constant edits
假設,如果我使用的系統可以跟蹤多個表(訂單,訂單項,產品)中的產品和訂單信息
orders
id INT(11)
shipping_name VARCHAR(255)
shipping_street VARCHAR(255)
shipping_city VARCHAR(255)
[etc]
order_details
id INT(11)
order_id INT(11)
product_id INT(11)
products
id INT(11)
name VARCHAR(255)
description VARCHAR(255)
price DECIMAL(8,2)
結構非常簡單, order
有多個order_items
, order_items
有一個product
。
問題是當有人編輯產品時,這些編輯會修改以前訂單的數據。 如果員工稍后返回並查看該信息,則可能與訂單下達時客戶收到的信息不同。
什么是最佳做法? 我應該在products表中添加'display_item'字段,並在編輯/刪除設置顯示為0並將編輯后的產品添加為新行? 我應該在order_details中復制名稱,描述和價格嗎?
我認為這是數據庫規范化“中斷”的情況之一。
一些可能的解決方
備選方案1的提案
創建products
表的副本,並為order_details
表創建每個訂單和訂單明細的關系(一對一)。
備選方案2的提案
將products
表拆分為兩個: product_general_info
和product_attributes
。 產品常規信息在時間上是穩定的(產品的一般信息不會改變),因為對此表中數據的任何修改都將傳播到整個訂單集。 產品屬性必須具有date
或timestamp
值,以定義屬性更改的時間。 然后,您可以查詢數據庫並返回訂單日期之前或之后的最后一條記錄。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.