Страницы

Поиск по вопросам

воскресенье, 12 мая 2019 г.

Составить правильную структуру БД на mySQL?

Есть проект, нужно создать интернет магазин с фильтром товаров. Пример можно посмотреть тут!. Справа видна фильтрация.
Есть некоторые догадки какую структуру сделать:
1) У каждой категории будут свои атрибуты по выборке товаров. т.е. атрибуты привязаны к категории а не к товарам.
2) Каждый товар привязан к одной конкретной категории (телевизор к телевизору, ноутбук к ноутбуку)
3) Когда добавляется товар, он будет выбирать категорию к которой хочет привязать его, а так как атрибуты привязаны к категории, то при добавлении мы показываем какие атрибуты показывать.
4) Значение атрибут мы будем хранить в отдельной таблице.
Вот как то так, ниже видно схему как я очертил ее.
Какие недочеты вы видите в этой работе, и вообще в нужном ли я направлении мыслю? Может быть не париться, а просто создавать для каждой категории таблицу с атрибутами. Если вы хотите дополнить мою карикатуру ссылка на схему тут.


Ответ

У меня реализована похожая схема. В принципе путь правильный, однако я бы предложил рассмотреть пару вариантов, которые Ваша схема не учитывает.
Скорее всего будут аттрибуты, которые одинаковы по своим параметрам для разных категорий. Например: все товары имеют размеры (ширина, высота, длина). Если Ваш магазин продает товары одной направленности (скажем, только электронику), тогда имеет смысл сделать аттрибут Brand (марка). Эти аттрибуты по своим свойствам одинаковы для всех товаров. Не важно холодильник это, или телевизор. Следуя созданной Вами структуре, для каждой категории придется создавать каждый из этих аттрибутов отдельно, что "не есть хорошо" :) Решения вижу два: 1.1 В таблице attr изменить id_category на varchar и хранить id категорий разделенные запятыми. Выборку можно делать с использование FIND_IN_SET(). Да, я знаю, что это не лучший вариант, но для маленьких магазинов сойдет. 1.2 Создать промежуточную таблицу attVsCategory, в которой хранить какой аттрибут к какой категории относится. Аттрибуты могут быть разного типа. Используя мой пример выше: размеры будут представлять из себя текстовое поле, а вот brand лучше сделать выпадающим списком. Для поддержки этого варианта нужно будет 2.1 создать таблицу типа attr_values_list, где хранить варианты аттрибутов, представленных выпадающим списком, или checkbox, или radio (короче аттрибуты с фиксированными вариантами ответов) 2.2 добавить в attr_value текстовое поле, и в нем хранить либо текстовое значение (для текстовых аттрибутов), либо id из вновь созданной таблицы attr_values_list
Думаю, что сделав продуманную Вами структуру, и добавив туда указанные выше пункты, вы покроете максимум возможных вариантов описания товаров. И это, вобщем-то, будет работать для магазинов абсолютно любой индустрии.
Удачи

Комментариев нет:

Отправить комментарий