Задать вопрос
@lexstile

Как организовать структуру заказов в БД (общепит)?

Есть следующая структура таблицы:
637132fbb541c415846204.png
В ней я храню позиции, который были добавлены в заказ, обращаю внимание на поле quantity, в нем я храню количество одинаковых одномоментно заказанных позиций (т. е. если позиции заказаны повторно - они идут отдельными записями).

Вопрос в следующем - стоит ли вообще отказаться от поля quantity и каждую позицию хранить отдельной записью?
Проблема 1: частичная оплата подобных позиций, придется, как минимум, хранить еще одно поле с количество, сколько позиций оплачено, а сколько еще нет.
Проблема 2: частичное удаление, придется декрементировать текущую запись, вместо того, чтобы просто удалить по идентификатору.
Проблема 3: статистика, гораздо проще организовывать статистику по отдельным записям, нежели еще учитывать различные счетчики.
....

Если я откажусь от поля quantity и буду просто дублировать одинаковые позиции отдельной записью, как минимум, логика работы станет проще.
Не будет проблем, которые описал выше.
Но будет больше записей в БД, думаю, что этот показатель не должен превышать 20-30% от первого кейса.

Вопрос в том, как правильно организовывать подобное?
И какой кейс предпочтительнее?

Что выбрать - +30% записей (проблема производительности) или усложненную логику?
  • Вопрос задан
  • 427 просмотров
Подписаться 2 Простой 13 комментариев
Решения вопроса 1
igolets
@igolets
Программист C#, MSSQL
Что-то мне подсказывает, что (скорее рано, чем поздно) возникнет задача построить отчет по отказам. В этом случае я бы эту таблицу оставил как есть, но добавил ещё таблицу с отказами, с полями "заказ, блюдо, количество, пользователь, дата".
Из бонусов — в обе таблички данные будут только добавляться, можно подбирать тип БД, который умеет в быструю вставку, с репликацией чуть проще...

На счёт частичной оплаты не понятно — зачем вообще такое, почему недостаточно оплачивать всё и сразу. И зачем отслеживать какие именно позиции оплачены.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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