Как правильно хранить заказы продуктов в базе данных mysql?
Почитал статьи в интернете о архитектуре бд и сделал такую структуру бд.
1. Таблица product - Все свойства продукта, имя, цена и т п.
2. Таблица orders - Все данные о заказчике, дата создания заказа, статусы (Отменен, Принят, Доставлен и т п)
3. Таблица order_product - product_id, order_id, count.
И вот начал писать код и сразу же столкнулся с нюансами. На фронте я храню данные корзины в массиве, где каждый продукт в виде json объекта при оформлении заказа, я на сервер отправляю этот же массив, и подумал зачем мне тогда таблица "order_product", если я могу хранить тот же массив в таблице orders и будет меньше запросов в бд. Подскажите, если хранить массив продуктов в таблице orders - это правильное решение или же все таки придерживаться статьям из интернета?
ну это негодная мотивация. лишних запросов разумеется не должно быть, но если запрос нужен по логике, то никакой "оптимизацией" его убирание нельзя оправдать.
Надо всегда делать по стандарту.
потом отдел маркетинга захочет узнать статистику по самым популярным товарам, и ты будешь по своим джейсонам бегать, читать каждый заказ из пхп
а при нормальной структуре это примитивный SQL запрос
Для правильного вопроса надо знать половину ответа
Если ваши данные нужны исключительно для хранения в БД (записали/прочитали), то можете держать их в любом виде. Если же с ними нужно будет работать - выполнять поиск, агрегацию, изменение - то правильно записывать их в отдельную таблицу и приводить базу в нормальную форму.
Учтите важный момент. В момент формирования ордера вы должны зафиксировать цену и описание товара, и ещё сохранить ссылку на оригинальный товар. Особое веселье если у вас мультивалютная оплата. Так что нормализация тут похоже только навредит.