Как правильно спроектировать данную «махину»? Делаю сайт доставки еды.
Клиенты делают заказ. Заказ может быть одиночный (single) и совместный (joint).Одиночный заказ - ничего особенного, строка в БД с колонками ID, заказчик, стоимость, статус и т. д.Совместный заказ - заказ, который делают несколько клиентов, они объединяются в так называемые "группы" - там у них есть чат, там они видят с кем они заказывают еду, видят статус заказа, цену и т. д. Совместные заказы также суются в таблицу orders с пометкой "совместный"
Сайт работает только через rest API. Схема заказа такая:POST запрос на /orders для создания заказа. Юзер передает товары которые хочет заказать и тип заказа - single или joint.Сервер сует заказ в таблицу orders и возвращает 201.Юзер начинает делать периодические запросы на GET /orders/current для обновления инфы о заказе
Все понятно с одиночным - строка в БД с заказом и все. А с совместными все сложнее - там несколько пользователей. Допустим, 3 пользователя объединены в одну группу. Получается, что в таблице orders три одинаковых строки (только ID создателя отличаются). Вдруг статус заказа поменялся - и мне нужно сейчас у этих 3 строк статус обновить? Как-то некрасиво получается.
У меня есть решение этой проблемы - создать вообще другую сущность Group которая никак не пересекается с Order. Или есть более адекватное решение?
Надеюсь, вы поняли мой вопрос) Пишите, если что-то непонятно в тексте вопроса)

21 Авг 2019 в 07:01
202 +1
0
Ответы
1

Да, ваш вопрос понятен. Проблема с повторяющимися строками в таблице orders при совместных заказах действительно может усложнить процесс обновления данных.

Создание отдельной сущности Group, которая будет содержать информацию о группе пользователей, объединенных для осуществления совместного заказа, может быть хорошим решением данной проблемы. В этом случае таблица orders будет содержать только информацию о заказах, а связь между заказами и пользователями из группы будет осуществляться через таблицу Group.

Когда происходит изменение статуса заказа, вам будет достаточно обновить информацию только в одной строке таблицы orders, а затем в таблице Group связать этот заказ с соответствующей группой пользователей.

Таким образом, вы избежите дублирования данных и упростите обновление информации о заказах в случае совместных заказов.

20 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 96 005 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир