2012-03-06 15 views
3

ショッピングカートを実装する必要があります。私が20種類の商品を販売しているとしましょう。1対多リレーションシップのデータベーススキーマを開発するにはどうすればよいですか?

私はカップルの簡単な表を持っています、16形式ではなく、Rubyのよう:4:15

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順にアイテムを表示する方法であり、アメジスト、オパール、シルバー。

+2

は私に多くの多くのような音。人は多くのアイテムを購入することができ、アイテムは多くの人が購入することができます。 – Dan

答えて

7

あなたの構造は1対多または多対多ではなく、1対1の "blob:of:colon:separated:text"です。

多くの場合、適切な関係はテーブルを使用して関係を橋渡しします。 あなたの特別なケースでは、そのテーブルはしばしば「トランザクション詳細」テーブルであり、「カート」テーブルは「トランザクションヘッダー」テーブルです。

あなたはこのような状況では3つのテーブルだろう:あなたが探しているものを取得するには、これを照会し、その後

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

私はちょうど1対 "blob:of:コロン:区切られた:テキスト"発言のために+10000を与えるでしょう。フィールドに複数の値を格納することは決して良い考えではありません。 – HLGEM

関連する問題