@mewithoutyou

Как хранить данные о заказах, товары в которых могут быть удалены?

Хочу понять, как сделать хранение данных о заказе в кафе, если товары могут быть удалены.
Например, заказ сохраняется в базе как подобная структура (у нас используется MongoDB).
{
	"id": 1,
	"name": "Client",
	"phone": "79000000000",
	"address": "Address",
	"comment": "Client comment",
	"products": [
		{
			"id": 1,
			"quantity": 1,
			"variation_id": 2
		},
		{
			"id": 3,
			"quantity": 2
		}
	]
}

Скажем, при открытии заказа клиента мы просто делаем выборку по id продуктов и выводим информацию. Но что делать, если позиция или ее вариация была удалена (как пример - сезонные меню каждые 3-4 месяца, и так далее). Какие здесь есть практики? Переносить в отдельную коллекцию такие позиции? Но тогда запрос будет выглядеть не таким уж гладким - надо будет искать id товаров, которые не нашлись в активных позициях и запрашивать из другой коллекции...
Я вижу варианты:
1) Либо удаление позиции заменить сменой статуса на Не активна и никуда не удалять, а на сайте фильтровать просто по параметру active: true (например);
2) Либо хранить в информации о заказе и название позиций и их вариаций.
Причем, мне кажется что придется делать смешанный вариант из этих двух, потому что мне же еще нужно как-то хранить цены товаров на момент покупки, плюс примененные скидки, если будут.
  • Вопрос задан
  • 173 просмотра
Решения вопроса 1
alex-1917
@alex-1917
Если ответ помог, отметь решением
1. Как минимум цену ПРОДАЖИ хранить в заказе. Или где её еще хранить?
2. Товары не удаляются, для этого придуман статус. (вообще в БД надо удалять строки как можно меньше, у вас точно не проект уровня МВИДЕО, накладные расходы будут доли %%.)
3. В 80% коробочных магазинов в заказе хранится вообще полная опись - сам товар, цена, параметры, кол-во.

Внимательно присмотритесь к своему проекту - вряд ли у вас 300млн товаров и 10000 заказов каждый день...
Храните все в заказе.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
удаление позиции заменить сменой статуса на Не активна и никуда не удалять

Правильное решение

P.S. Не очень(совсем не) подходящая задача для нереляционной БД.
Ответ написан
Krasnodar_etc
@Krasnodar_etc
fundraiseup
А почему бы вместо id не класть полное инфо о товаре (включая цены, ...) на момент совершения заказа?
Ответ написан
Ваш ответ на вопрос

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

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