Как я могу разработать схему базы данных для отношения один ко многим? - PullRequest
3 голосов
/ 07 марта 2012

Мне нужно реализовать корзину для покупок. Давайте предположим, что я продаю 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, а в виде рубина, аметиста, опала, серебра.

1 Ответ

7 голосов
/ 07 марта 2012

Ваша структура - это не один-ко-многим или многие-ко-многим, это всего лишь один к «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
...