Я знаю, что есть много вопросов с таким же беспокойством, но я получил так много ответов, но, к сожалению, я не понял или, возможно, не удовлетворен.
Цель. Я хочу, чтобы у моих товаров могло быть несколько атрибутов, и в зависимости от их комбинации они могли иметь свою цену, артикул и наличие.
Пример Футболка имеет атрибуты (параметры) размера, цвета и материала.
поэтому я хочу эту гибкую структуру, которая
Цвет: Красный, Размер: M, Материал: Мягкий -> цена $ 1, артикул XXX, сток 3 Цвет: Красный, Размер: L, Материал: Мягкий -> цена 2 доллара, артикул XXX, сток 4 Цвет: Черный, Размер: XL, Материал: жесткий -> цена 3 $, sKu XXX, сток 4
Прямо сейчас у меня есть следующая структура, которая подходит, если указан только один атрибут (опция). Но он не подходит для вариаций (комбо).
Таблица товаров
CREATE TABLE `products` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`brand_id` int(11) DEFAULT NULL,
`vendor_id` int(11) NOT NULL,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`slug` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`long_description` longtext COLLATE utf8_unicode_ci NOT NULL,
`short_description` longtext COLLATE utf8_unicode_ci,
`images` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`weight` decimal(8,2) NOT NULL,
`discount` int(11) DEFAULT NULL,
`discount_start` timestamp NULL DEFAULT NULL,
`discount_end` timestamp NULL DEFAULT NULL,
`status` tinyint(4) NOT NULL,
`released_on` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Таблица параметров
CREATE TABLE `options` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Таблица Products_Options
CREATE TABLE `products_options` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) NOT NULL,
`sku` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`option_id` int(11) DEFAULT NULL,
`option_value` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`unit_price` decimal(8,2) NOT NULL,
`available_stock` int(11) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
`updated_at` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
Таким образом, таблица products_options
может хранить продукты следующим образом
Color: Red -> price $1, sku xxx, stock 3
Size: M -> price $1, sku xxx stock 3
Но это не отражает, хочу ли я хранить цвет: красный размер: м по одной цене, артикулу и наличию.
Спасибо