2010-11-19 3 views
0

я нужна база данных со следующим:какую модель базы данных использовать?

схемы применительно
Product | Discounter | Price 
--------------------------------------------------------- 
Onion | a | 99.99 
    | b | 1.07 
    | c | 750.00 
Garlic | a | 0.39 
    | b | 17.56 
    | c | 3.59 

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

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

+0

Я не понимаю вопрос как отформатированный - что вы пытаетесь представить с помощью этой таблицы? – Carl

+0

Я хочу показать цены на один продукт в нескольких дискаунтерах –

ответ

3

Использование двух таблиц. Ваши таблицы могут выглядеть следующим образом (в псевдо-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) 

Чтобы выбрать разные цены на продукт, скажем, идентификатор 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

Согласен с Клаусом. Вы должны добавить первичные ключи Продукт (product_id) и ProductDiscounter (product_id, discounter) Посмотрите на http://en.wikipedia.org/wiki/Third_normal_form – kolchanov

+0

@ kolchanov, вы правы. Я обновил ответ. –

+0

Mange tak, Klaus! –

0

Вы не можете иметь ячейку в одном столбце, охватывающую несколько строк.

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

0

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

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

Спасибо, zanlok! –

Смежные вопросы