какую модель базы данных использовать? - PullRequest
0 голосов
/ 19 ноября 2010

Мне нужна база данных со следующим форматом:

Product | Discounter | Price
---------------------------------------------------------
Onion   |   a   |   99.99
  | b  | 1.07
  | c | 750.00
Garlic  |   a   |   0.39
  | b | 17.56
  | c | 3.59

Я хочу использовать MySQL, но как я могу расширить ячейку «Продукт» по каждой строке в «Discounter»?

Заранее спасибо, неизвестно

Ответы [ 3 ]

3 голосов
/ 19 ноября 2010

Используйте две таблицы.Ваши таблицы могут выглядеть следующим образом (в псевдо-DDL)

Product
   product_id int,
   product_name varchar(20),
   constraint pk_product primary key (product_id)

ProductDiscounter
   product_id int,
   discounter char(1),
   price decimal,
   constraint pk_product_discounter primary key (product_id, discounter),
   constraint fk_product_discounter foreign key (product_id) references (Product.product_id)

Чтобы выбрать разные цены для продукта с, скажем, id 1, вы можете выполнить следующую инструкцию выбора:

select p.product_name, pd.discounter, pd.price 
from Product p, ProductDiscounter pd
where p.product_id = pd.product_id 
and p.product_id = 1
0 голосов
/ 19 ноября 2010

Я бы также рекомендовал как очень полезную групповую функцию после того, как ваши таблицы структурированы / нормализованы так, как обозначил Клаус. Что хорошо в этом, так это то, что вы можете сделать так, чтобы БД вычисляла статистику как среднюю цену среди дискаунтеров для каждого продукта. Я также укажу, что вы можете отсортировать конечный результат (даже после группировки) по названию продукта, чтобы при отображении все было удобным для интерфейса.

SELECT p.product_name, pd.discounter, Avg(pd.price) as `Average Discounter Price`
FROM Product p
LEFT JOIN ProductDiscounter pd ON p.product_id = pd.product_id
GROUP BY p.product_id
ORDER BY p.product_name
0 голосов
/ 19 ноября 2010

Нельзя, чтобы ячейка в одном столбце занимала несколько строк.

Ответ Клауса очень общий (и поддерживает вывешивание множества других данных из идентификаторов продуктов), поэтому я бы согласился, если у вас есть реальная сложность в вашей проблеме. Однако, если дело так же просто, как описано в вашем вопросе, вы можете просто указать название продукта в каждой строке. A SELECT * WHERE Product == все, что будет отлично работать на таком столе.

...