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

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, но как я могу расширить ячейку "Product" по каждой строке в "Discounter"?

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

  • 0
    Я не понимаю вопрос в отформатированном виде - что вы пытаетесь представить с помощью этой таблицы?
  • 0
    Я хочу показать цены на один продукт в нескольких дискаунтерах
Теги:
database
rdbms

3 ответа

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)

Чтобы выбрать разные цены для продукта, скажем, 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
  • 0
    Договорились с Клаусом. Вы должны добавить первичные ключи Product (product_id) и ProductDiscounter (product_id, discounter). Посмотреть на en.wikipedia.org/wiki/Third_normal_form
  • 0
    @ kolchanov, ты прав. Я обновил ответ.
Показать ещё 2 комментария
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
    Спасибо, занлок!
0

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню