2009-07-03 100 views
0

我有兩個表,一個叫做「cart」,一個叫做「items」。現在我希望購物車能夠存儲「物品」和數量的列表。因此,我創建了另一個表「cart_items」,其中包含模板ID,商品ID和數量的字段。SQL/PHP:表設計問題

這是很好的設計,或者我應該添加一個字段爲「cart_item」的ID?或者有更好的方法來一起做這件事嗎?當我嘗試更新我的購物車時,我只是遇到了麻煩,我的購物車項目沒有正確更新。我所要做的就是刪除全部附加到購物車的「cart_items」,然後重新添加每個「cart_item」,我不禁想到必須有更好的方法來做到這一點。

回答

2

這是非常好的設計。

在ER(實體關係)方面有物品和車之間的許多一對多的關係。我的意思是一件物品可以出現在許多不同的手推車中,一輛手推車可以包含許多不同的物品。在這種情況下,「許多」的意思是「一個可以超過一個的可變數字」。

你cart_items表是所謂連接表,你需要它的許多一對多的關係進行建模。添加數量字段也是有道理的,因爲將其放在cart_items上。

你有兩個選擇,當涉及到的關鍵:

  1. 製作(cart_id,ITEM_ID)主鍵。這被稱爲複合主鍵;或
  2. 創建一個名爲id的自動增量字段。如果你這樣做(cart_id,item_id)一個唯一的索引來強制唯一性。

兩種選擇是有效的。我個人更喜歡(2)。你也應該在(item_id,cart_id)上有一個唯一的索引。

1

我不確定你的桌子看起來到底如何,但是像下面這樣的東西會是一個好的開始。

Items 
+-- ID --+-- Description --+-- Etc --+ 
|  1| Good item here | Buy one.| 
|  2| Another item | somethin| 


Cart 
+-- Cart ID --+-- Item ID --+-- Amt --+ 
|   1|   1|  4| 
|   1|   2|  3| 

每個車都有一個唯一的ID,與存儲在其自己的行每個項目。通過這種方式,您可以一次添加或移除一個項目,同時保持項目鏈接,並且同時從一個購物車中選擇所有項目。

1

一個指針我會給你的,而不是直接連接推車的項目,您複製從項目的所有relavent信息到另一個表,可能cart_Items,並鏈接到購物車。這很有用,因此您可以隨時維護添加到購物車的內容。除非這些只是快速扔掉只需要一個會話的購物車,否則您希望能夠確切瞭解該人在該時間點放入購物車的歷史記錄,並且不會在有人的購物車數據發生變化時決定改變有關物品的內容,或者在物品被刪除時讓物品消失。

1

正如前面所解釋的,你所做的是正確的。 唯一缺少的是在你的數據庫中使用DELETE CASCADE和FOREIGN KEYS

這時候你刪除CART一排它會轉到CART_ITEM也刪除方式。

+0

你能解釋一下這些是如何工作的嗎? – MackDaddy 2009-07-04 01:44:30