@ggagnidze

Как хранить несколько элементов справочника в поле?

Доброго дня.

Предположим, что компания занимается доставкой товаров.
У нее есть справочник (таблица MySQL) товаров:

1 Апельсиновый сок
2 Ананасовый сок
3 Березовый сок

Клиент оказался гурманом и заказал Ананасовый и Березовый сок.

Вопрос: как правильно отразить этот заказ в таблице заказов с точки зрения MySQL?
Нужно ли указывать ID товаров через запятую в одном поле или следует сделать как-то иначе?

Спасибо.
  • Вопрос задан
  • 4579 просмотров
Решения вопроса 1
Я бы сделал так. Две таблицы:
1. Таблица user_order — хранит userId и orderId (генерируется когда пользователь оформил заказ, orderId есть primary autoincrement id для таблицы orders)
2. Таблица order_item — хранит orderId и itemId
Ответ написан
Пригласить эксперта
Ответы на вопрос 7
JustLuckyGuy
@JustLuckyGuy
двоичным числом. или как это правильно называется.
01 — апельсин
10 — ананас
11 — береза

т.е. если клиент заказал все 3 сока, то будет 100 (все числа в двоичной системе). соответственно переводишь в десятичную и в путь.
Ответ написан
adminimus
@adminimus
можно использовать три таблицы: номенклатура товаров, заказы, позиции в заказах. В третью таблицу пишите две строки (Ананасовый и Березовый сок) с привязкой к строке таблицы «Заказы» по id заказа например.
Можно конечно складывать заказы в одну таблицу и писать позиции в одно больше поле. Формат берете какой удобно (plain text, xml, json, сериализованные объекты...), парсить его вам все равно придется отдельно кодом. Минус этого решения в том, что поддерживать ссылочную целостность базы будет очень геморройно. Ну и очевидные накладные расходы на хранение и обработку
Ответ написан
Комментировать
@ggagnidze Автор вопроса
Мне прямо не верится что нет готовых решений. Это же задача любого интернет-магазина, коих великое множество. Lолжна же быть Best Practice.
Ответ написан
miraage
@miraage
Старый прогер
NoSQL Вам в помощь.
Если все-таки MySQL — согласен с JetMaster
Ответ написан
Комментировать
dali
@dali
Без разницы, MySQL или любая другая реляционная база данных. Нормализуется хотя бы до 3 нормальной формы. Все, как расписал JetMaster и savant.
Ответ написан
Комментировать
Sild
@Sild
Вроде бы хранить 2 значения в одном поле противоречит то ли нормальным формам, то ли реляционным БД в целом
Ответ написан
Комментировать
chuck
@chuck
Если есть возможность перейти на Postgres, то там есть тип данных — массив.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы