Доброй ночи! Хотелось бы услышать советов и критики моей архитектуры БД, относительно нескольких сущностей, а так же помощи и советов в сортировке этих вещей.
Есть сервис, в котором храняться шаблоны товаров, они добавляються администратором. Потом, поставщики могут выбрать из списка товар и задать цену и кол-во. После чего оно продается. Так же есть такие вещи как характеристики, группы характеристик, по которым мы собираем N характеристик и привязываем к товару. Например, группа характеристик - телефон, будет иметь в себе, скажем, экран, память, хранилище.
У каждой характеристики есть свои значения, например экран: ips, oled, amoled, etc...
Следовательно у меня есть таблица для хранения, названия характеристики
specifications:
id,
title,
position
Значения характеристик я храню в таблице
specifications_values:
id,
specification_id
value,
position
Для группы характеристик 2 таблицы, одна хранит название группы, другая связь между группой и характеристикой.
specifications_groups:
id,
title
specifications_groups_relation:
id,
specification_group_id,
specification_id
Так же, мне нужно хранить связь, между товаром, характеристикой, которая к нему привязана и значением этой характеристики. Для этого, есть таблица
products_specifications:
id,
p_id - идентификатор продукта,
v_id - идентификатор значения характеристики,
s_id - идентификатор характеристики
Когда поставщик создает товар - он выбирает группу характеристик и у него появляются N тегов select, количество которых равно количеству характеристик в группе.
Дальше, когда идет запрос к серверу, я создаю товар, беру его идентификатор, беру значения для полей v_id, s_id, и сохраняю их.
Штука в чем - насколько неправильно и награможденно выглядит база для решения моей задачи? Что убрать, а что добавить? Может есть замечания и советы, буду предельно благодарен за любую, конструктивную критику и советы.
Дальше мне нужно выводить товары, отсортировав их по определенным правилам. Например товары из категории Iphone 6 будут иметь группу характеристик "Телефон", хотя, конечно, пользователь может выбрать и любую другую.
Так вот, мне необходимо взять все товары из этой категории, взять характеристики из группы характеристик привязанных к товару и отсортировать их. Для этого у таблиц specifications_values и specifications есть поля position.
Суть в чем - я сортирую характеристики по position, беру первую характеристику, захожу в нее, сортирую товары по значениям этой характеристики, опираясь на поле position. Получив результат, мне необходимо взять следующую характеристику, перейти к ее значениям и снова отсортировать товары, которые были отсортированы по предыдущей характеристике и так до тех пор, пока не пройдусь по всем привязанным характеристикам. Потом, вывожу.
В конечном итоге я должен получить, что-то такое
Phone X 16GB(position:1) EU(position:1)
Phone X 16GB(position:1) CHINA(position:2)
Phone X 32GB(position:2) EU(position:1)
Phone X 32GB(position:2) CHINA(position:2)
Какой максимально правильный способ я должен использовать. Разбивать ли сортировку на части или это все можно без большой крови сделать используя eloquent orm?
Проект на laravel. Большое спасибо за любую помощь!