В MySql сейчас примерно такая схема:
Разделы товаров
Код: Выделить всё
CREATE TABLE `section` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR (255),
`slug` VARCHAR (255)
)
Код: Выделить всё
CREATE TABLE `type` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR (255),
`slug` VARCHAR (255)
)
Код: Выделить всё
CREATE TABLE `product` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR (255),
`aritcul` VARCHAR (255),
`price` INT,
`content` TEXT
);
Код: Выделить всё
CREATE TABLE `product_param_name` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`parent` INT UNSIGNED NOT NULL,
`name` VARCHAR (255),
`key` VARCHAR (255),
`` SMALLINT NOT NULL DEFAULT 0,
`type` TEXT
);
Код: Выделить всё
CREATE TABLE `product_param_variant` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`param_id` INT UNSIGNED NOT NULL,
`name` text NOT NULL
)
Код: Выделить всё
CREATE TABLE `product_param` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
`param_id` INT UNSIGNED NOT NULL,
`product_id` INT UNSIGNED NOT NULL,
`variant_id` INT UNSIGNED NOT NULL,
`value` text
);
Первая мысль:
Код: Выделить всё
{
"id": 6374,
"articul": "so6374bc",
"name": "X MUI 7z BLACK (2017/ 16')",
"section": 7,
"type": 6,
"parameters": [
{
"name": "size",
"value": ["9.5", "11"]
},
{
"name": "color",
"value": "22"
},
{
"name": "gender",
"value": "men"
},
{
"name": "year",
"value": "2017"
}
]
}
Код: Выделить всё
{
"id": 6374,
"articul": "so6374bc",
"name": "X MUI 7z BLACK (2017/ 16')",
"section": 7,
"type": 6,
"parameters": {
"size": ["9.5", "11"],
"color": "22",
"gender": "men",
"year": "2017"
}
}
Или вообще параметры не выносить в отдельное свойство и представлять их как обычные аттрибуты товара?
В админке у параметров есть чекбокс, определяющий использовать ли параметр в качестве фильтра на сайте, соответственно схема товара часто изменяется.