2011-04-24 178 views
1

我正在開發在線購物車系統,我有物品和item_options表。更新信息時插入新記錄?

每個物品可以有一個或多個選項,請參見下文。

項目表

  • ITEM_ID(PK)
  • ITEM_NAME
  • ITEM_DESCRIPTION

注:商品價格都在item_options表

item_options表

  • option_id(PK)
  • ITEM_ID(FK)
  • OPTION_NAME
  • option_price

當顧客下了訂單,則數據將被添加到順序和ORDER_ITEMS表。

訂單表

  • orders_id(PK)
  • CUSTOMER_ID(FK)
  • address_address_id
  • date_purchased
  • orders_status
  • orders_date_finished
(FK)

ORDER_ITEMS表

  • orders_items_id(PK)
  • orders_id(FK)
  • ITEM_ID(FK)
  • item_option_id(FK)

還有一個問題,如果員工更改價格,項目名稱或刪除項目..客戶發票將受到影響,因爲FK來自order_items wi將不再存在於項目表中。這有什麼解決辦法?

該解決方案如何:在itemsitem_options表中添加活動字段。當工作人員想要更改物品的價格或名稱時 - 只需將當前活動記錄變爲0(items.active),然後插入一條新記錄和新信息,並激活成爲1.舊訂單仍指向正確的不活躍的條目。這是做這件事的好方法嗎?

將新信息插入到項目表中後,是否意味着我必須更新/更改item_id.item_options表中的新PK ID?

回答

2

在這樣的事情中,我絕對反對使用硬刪除。每次更新或刪除都應該在item_options表中添加一個新行,然後將之前的行標記爲非活動狀態(這樣用戶就不可能選擇其中一個先前的值)。

插入每一個新的項目應包括兩個步驟:

  1. 的項目添加到項目表
  2. 使用從項目表中的ITEM_ID,添加項目到item_options表
+0

謝謝。在關於數字2.即使我沒有改變選項名稱或價格...我需要獲得option_name和option_price的價值第一?然後用新的item_id插入到item_options中? – user622378 2011-04-24 14:06:43

+0

是的,我相信你會需要,因爲這是現在與新的記錄(項目)鏈接。除非我不能正確理解你的問題... – judda 2011-04-24 14:12:45

+0

我會重新解釋我的問題,只是爲了確保:)如果我只改變items.item_name和items.item_description的值..我仍然需要添加新的記錄item_options表,即使我沒有改變item_options.option_price的值? – user622378 2011-04-24 14:31:21

2

我見過的典型解決方案是將您想要歷史記錄的數據的快照存儲在單獨的表中。這樣,您只能存儲發票時想要快照的數據,而不是特定表格中的所有數據。

當涉及簡化代碼中的報告和查詢時,它還有助於將歷史數據從實時數據中刪除。通常,這兩件事不需要同時訪問,因此您可以避免更多複雜的查詢(以及單個表上較重的負載)只是爲了訪問其中一個。

+0

這不是一個壞主意。如果我理解正確,我需要創建新表:history_items,history_item_options?要顯示客戶過去的訂單,請首先檢查當前項目表中的數據,如果未找到item_id,請檢入history_items.item_id? – user622378 2011-04-24 14:02:07

+0

實現的具體細節將取決於您的業務規則,但我所看到的1個場景僅存儲可能會更改的事物(如價格)的歷史數據,以及物品ID的參考。特定項目定義數據(產品目錄#等)不可能在其發生變化或重要時發生變化(事實上可以使其不變),因此不必每次都存儲它。這也使您可以靈活地應用項目定義之外的發票專用價格調整(系統覆蓋,折扣代碼調整等),以便發票價格不受限於項目定義。 – roberttdev 2011-04-24 14:15:22

+0

除上述內容外,還有一點需要注意..在這種情況下,您不要刪除不再支持的項目,只需將它們標記爲「已刪除」或「過期」並將其保留在系統中,以便舊發票可以引用它們。 – roberttdev 2011-04-24 14:16:15

0

如果您要按照您描述的方式執行操作,您將不得不向item_options表添加新行以處理新項目。

+0

爲什麼我必須添加一個新的行到item_options如果我只改變item.name例如?如果我在item_options.option_price中更改價格 - 是否意味着我必須在商品表中添加新行?這是最好的解決方案嗎? – user622378 2011-04-24 13:56:06

相關問題