2012-03-06 37 views
3

我需要實現購物車。假設我在銷售20種不同的物品。如何爲一對多關係開發數據庫模式?

我有幾個簡單的表:

Cart 
------- 
tran_id first_name last_name items 
1   John   Doe   1:4:15:16 


Item 
------- 
item_id name   price 
1   Ruby   $1.00 
2   Diamond  $2.00 
... 

的一點是,我怎麼能查詢車和顯示的項目中的訂單不是在1:4:15:16格式,而是作爲紅寶石,紫水晶,蛋白石,銀。

+2

聽起來好像很多很多我。一個人可以購買許多物品,一件物品可以被許多人購買。 – Dan 2012-03-06 21:19:36

回答

7

您的結構不是一對多或多對多的,它只是一對一的「blob:of:冒號:分隔:文本」。

適當的多對多關係通常使用表來彌補關係。 在您的特定情況下,該表通常是「交易詳情」表,而您的「購物車」表是「交易標題」表。

你將不得不在這種情況下,三個表:

CART (transaction header) 
--------------- 
tran_id NUMBER 
first_name VARCHAR(100) 
last_name VARCHAR(100) 

CART_ITEM (transaction detail) 
--------------- 
tran_id NUMBER 
item_id NUMBER 
.. other details about this line item (quantity, etc) 

ITEM 
--------------- 
item_id NUMBER 
name VARCHAR(100) 
price NUMBER(18,4) 

然後,查詢這個讓你在找什麼,只是說:

SELECT h.tran_id, i.name, i.price 
    FROM cart h 
INNER JOIN cart_item d ON (h.tran_id = d.tran_id) 
INNER JOIN item i ON (d.item_id = i.item_id) 
WHERE h.tran_id = 1 
ORDER BY i.name 
+5

我只給+10000一個「blob:of:冒號:分隔:文本」的說法。在一個字段中存儲多個值絕不是一個好主意。 – HLGEM 2012-03-06 22:47:19