簡體   English   中英

通過不斷編輯維護訂單數據的完整性

[英]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_itemsorder_items有一個product

問題是當有人編輯產品時,這些編輯會修改以前訂單的數據。 如果員工稍后返回並查看該信息,則可能與訂單下達時客戶收到的信息不同。

什么是最佳做法? 我應該在products表中添加'display_item'字段,並在編輯/刪除設置顯示為0並將編輯后的產品添加為新行? 我應該在order_details中復制名稱,描述和價格嗎?

我認為這是數據庫規范化“中斷”的情況之一。

一些可能的解決方

  1. 保留每個訂單的產品屬性的副本。 這在存儲方面很昂貴,但它可以更容易地跟蹤訂單中存儲的產品數據。
  2. 創建可以及時更改的屬性日志。 產品屬性可能會隨時間而變化,因此存儲修改日期的日志可幫助您過濾產品屬性,直至訂單生成。

備選方案1的提案

創建products表的副本,並為order_details表創建每個訂單訂單明細的關系(一對一)。

備選方案2的提案

products表拆分為兩個: product_general_infoproduct_attributes 產品常規信息在時間上是穩定的(產品的一般信息不會改變),因為對此表中數據的任何修改都將傳播到整個訂單集。 產品屬性必須具有datetimestamp值,以定義屬性更改的時間。 然后,您可以查詢數據庫並返回訂單日期之前或之后的最后一條記錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM