Как правильно организовать структуру БД интернет магазина?
Допустим в интернет магазине будет продаваться 2 вида товаров, это электроника и канцелярия.
В электронике будет 2 подкатегории: Телевизоры, зарядные устройства для телефонов
В канцелярии будет 3 подкатегории: гелевые ручки, тетрадки, ну и...бумага А4.
В телевизорах допустим есть 6 уникальных полей. Это ширина экрана, наличие WI Fi и тд
В зарядных устройствах их 5.
В гелевых ручках их 3.
В тетрадках их 8.
В бумаге А4 их 10.
Так вот, как правильно построить архитектуру и добавлять товар в бд?
Ты будешь это делать несколько месяцев в лучшем случае. Почему бы не взять готовый скрипт, где уже это всё сделанно и оттестированно давным давно? OpenCart/PrestaShop - например??
Категории строим по nestedSets и не думаем сколько их будет
Поля делаем динамическими и тоже не думаем о их кол-ве
product: id | title
option: id | title
product_option_value: id | option_id | product_id | value
Arman Baelov: у Максима Тимофеева есть видео как раз показать саму логику nestedSets, правда на фреймворке, тем не менее -- иллюстрирует в начале видео сам принцип работы и структуру БД
Пример
То есть если таблица с категориями выглядит так:
| id | name |
| 1 | для дома |
Для товара с категорий "Для дома" данные будут выглядеть так:
| id | name | category_id |
| 235 | Мочалка | 1 |
__________
С этим я разобрался, а как сюда характеристики каждой категории запихнуть?
Ведь если на сайте будет большое количество категорий и подкатегорий, а у каждой подкатегории свои характеристики в базе данных, это вызывает небольшие проблемы.
Arman Baelov: нет
param: id | name (1 | цвет)
param_values: id | product_id | param_id | value (12 | 123 | 1 | красный)
Характеристики в первую очередь связаны с товарами, а не с категорией. Что бы не выбирать какие характеристики есть у товаров в данной категории, и вообще управлять фильтрами в категории, можно сделать у категории доп поле, где например в виде json хранить настройки фильтров {0: {param_id:1,type:dropdown,sort:4},1: {param_id:2,type:checkbox,sort:1}}
Создается таблица с характеристиками, в ней только название характеристики и ее id, чтобы указывать в другой таблице путь к ней через ключ param_id
Создается таблица со значениями характеристик, в ней указываютя id товара (product_id), указывается id характеристики (param_id) и указывается значение
К примеру 2 категории и 4 подкатегории
Электроника -> Телевизоры
Электроника -> Компьютеры
Товары для дома - > Постельное белье
Товары для дома - > Быт.химия
Я создаю таблицу categories где храню все категории и их подкатегории:
id parent_id name_cat
1 0 Электроника
2 0 Товары для дома
3 1 Телевизоры
4 1 Компьютеры
5 2 Постельное белье
6 2 Быт. химия
А характеристики товаров как хранить? И как добавлять? Форму на ajax делать? Чтобы в зависимости от категории менялись поля?
Вообще в идеале как выглядит добавление:
Добавить товар - > Выберите категорию -> Выберите подкатегорию - > (Тут формы меняются под категорию и ее подкатегорию) Заполните данные о товаре
Arman Baelov: Категории для интернет магазина через parent_id не самая хорошая идея. Так как выводить многоуровневое дерево будет проблематично. Я бы посоветовал nestedSets, вот видео гайд