2011-04-24 177 views
1

我正在開發在線購物車系統。現在我需要將項目/購物籃添加到訂單表中。我想確定我是否走在正確的道路上?購物車訂購表

這些是主要的產品表:

項目表

  • ITEM_ID(P)
  • ITEM_NAME
  • ITEM_DESCRIPTION

注:商品價格都在item_options表

item_options表

  • option_id(P)
  • ITEM_ID(F)
  • OPTION_NAME
  • option_price

item_extras表

  • extras_id(P)
  • option_id(F)
  • extras_name
  • extras_price

以下是在訂單表。正如您可以看到項目名稱,選項名稱和額外名稱一樣,價格將被複制到訂單表中。如果任何商品名稱或價格發生變化 - 它不會影響訂單表。例如,發票不會受到影響。

訂單表

  • orders_id(P)
  • CUSTOMER_ID(F)
  • address_book_id(F)(用於遞送地址經過)
  • date_purchased
  • orders_status
  • orders_date_finished

ORDER_ITEMS表

  • orders_items_id(P)
  • orders_id(F)
  • ITEM_ID(F)
  • ITEM_NAME(從項目表中複製)
  • ITEM_DESCRIPTION(從項目複製表)
  • option_id(f)
  • OPTION_NAME(從item_options表中複製)
  • option_price(從item_options表中複製)

order_extras表

  • order_extras_id(P)
  • orders_id(F)
  • orders_items_id( f)
  • extras_id(f)
  • extra_name
  • extra_price

回答

1

我想提出兩個潛在的優化這個數據庫模式。

首先,是否有任何可以應用於兩個不同選項的附加功能,例如選項和演員有多對多的關係?如果是這樣,你需要添加具有以下結構的鏈接表:

optionExtras 
optionId, pk 
extraId, pk 

你再通過刪除optionId場改變演員表。這可以消除潛在的冗餘。其次,不是複製項目名稱,選項名稱和額外名稱,爲什麼不在每個標題爲活動的表格中添加一個布爾(0-1)行,這表示當前可能在每個表格中選擇哪些項目排序。這樣避免了額外的冗餘,產品可以重新設置,而不會影響舊發票的信息。當您想要更改產品的價格或名稱時,只需將當前活動記錄關閉,然後插入新記錄和新信息。舊的訂單顯然仍然指向不活躍的條目的正確標識。

您也可以進一步採取這一步驟,並使用活動列來表示可供輸入特殊代碼的人員使用的產品。標籤這些產品有效= 2.

無論如何,這些是我的想法,希望他們有幫助!

+0

感謝您的詳細迴應戈登,我想確保我能正確理解您。你是否想要添加一個名爲「optionExtras」的新表?我不明白這個潛力如何消除冗餘?產品工作方式:一個項目可以有很多選項。一個選項可以有許多額外的。其次在關於布爾值,你的意思是像items.active,item_options.active 1或0?這真是個好主意,謝謝:) – user622378 2011-04-24 11:45:18

+0

如果我更改產品的價格或名稱,我會將活動記錄設置爲關閉狀態,然後插入新記錄,但這意味着我必須更新item_options中的新item_id .item_id(FK)表? – user622378 2011-04-24 11:51:21

+0

是一個名爲optionExtras的新表。正如你所說,一個項目可以有很多選項,一個選項可以有很多額外的。但是選項1是否與選項2或選項3具有相同的額外功能?或者一些相同的選擇?在這種情況下,您通過鏈接表來簡化這種多對多關係是解決兩次複製相同信息的可能性的最佳方法。 – GordyD 2011-04-25 14:22:46