我知道有很多类似的问题,但我已经阅读了很多答案,但不幸的是,我没有理解或者可能不满意。
目标 我希望我的产品可以具有多个属性,并根据它们的组合拥有价格、sku和库存
例子 T恤产品具有尺寸、颜色和材料属性(选项)
因此我希望有这种灵活的结构:
颜色:红色,尺码:M,材质:柔软 -> 价格$1,sku XXX,库存3 颜色:红色,尺码:L,材质:柔软 -> 价格$2,sku 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;
产品选项表
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
但是它并不能反映我想要存储颜色:红色 尺码:m 有一个价格、sku和库存。谢谢。