Существует такая задача:
В интернет-магазине на DST Store, у нас существует список товаров (кол-во которых никогда не перевалит даже за 100 шт), которые разбиты по категориям.
Одна из категорий товаров подразумевает под собой некие «подписки» (т.е. товар один, но у него может быть несколько вариантов или опций — 1 месяц, 6 месяцев, 1 год, lifetime). Как хранить всё это в базе данных?
Ситуация похожа на какой-нибудь универсальный маркетплейс, где продается как одежда (те самые опции товара это по сути размер или цвет), так и обычные товары, не имеющие дополнительных опций.
Что уже было предложено:
1. Создание отдельной таблицы под каждую категорию товара. Возможно, хорошее решение (т.к. категорий будет в худшем случае 10), однако всё ещё непонятно, как добавлять нужный товар, например, в корзину. Как понять, на какую таблицу ссылаться? Была также идея создания дополнительной универсальной таблицы «StoreItem», содержащей поля «item_id» и «item_category», то есть создание некой неявной связи с другой таблицей (на уровне софта понимаем, к какой таблице принадлежит item_category, и ищем в нужной таблице айди, равный item_id). Вроде должно работать, но мне это решение кажется несколько странным.
2. Создание универсальной таблицы «StoreItem» и дополнительной таблицы «ItemOption». На практике оказалось очень сложно управлять всем этим, да и таблица ItemOption не используется нигде, кроме как в этой категории.
3. Использование NoSQL. Как человек, который с NoSQL базами практически не работал, не совсем понимаю, стоит ли оно того, и если да, то нормальная ли это практика — совмещать реляционную и нереляционную БД? Где хранить корзины, заказы в таком случае?
Какое самое красивое / элегантное / практичное решение?
Заранее спасибо за помощь!
