Мне нужна база данных со следующей оболочкой:
Product | Discounter | Price
---------------------------------------------------------
Onion | a | 99.99
| b | 1.07
| c | 750.00
Garlic | a | 0.39
| b | 17.56
| c | 3.59
Я хочу использовать MySQL, но как я могу расширить ячейку "Product" по каждой строке в "Discounter"?
Спасибо заранее, неизвестен
Используйте две таблицы. Ваши таблицы могут выглядеть следующим образом (в псевдо 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:
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
Я также рекомендовал бы очень полезную групповую функцию после того, как ваши таблицы будут структурированы/нормализованы так, как обозначил Клаус. Что хорошего в этом, вы можете на самом деле иметь статистику расчета 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
Вы не можете иметь ячейку в одном столбце, состоящую из нескольких строк.
Ответ Клауса очень общий (и поддерживает зависание множества других данных от идентификаторов продуктов), поэтому я бы пошел с этим, если у вас есть какая-то реальная сложность в вашей проблеме. Однако, если дело так просто, как описано в вашем вопросе, вы можете просто поместить имя продукта в каждую строку. A SELECT * WHERE Product ==
все, что будет прекрасно работать на такой таблице.