参考京东商品详情

可以看出来一个商品有多个属性(颜色、尺码),每个属性对应多个规格,所有的属性规格必选其一组合起来为一个 SKU

设计表

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# 基础产品表
CREATE TABLE `product`
(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '产品名',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='产品表';

# 产品的属性表,存放产品有哪些属性,例如:颜色、尺码
CREATE TABLE `product_attr`
(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '产品ID',
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '属性名',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='产品属性表';

# 产品属性下的对应选项表,一个属性有多个选项,例如:颜色有黑白,尺码有40,41
CREATE TABLE `product_attr_param`
(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '产品ID',
`product_attr_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '产品属性ID',
`name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '选项名',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='产品属性选项表';

# 产品的 SKU 表,一个SKU对应着一个价格
CREATE TABLE `product_sku`
(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '产品ID',
`price` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '售价',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci COMMENT ='产品SKU表';

# 产品的 SKU 对应的信息表,一个 SKU 下有多个属性选项数据,也就是多个选项组合为一个 SKU
# 一个产品的属性有几个,这张表对应的 sku_id 下就对应几条数据
# 一个产品下的属性选项组合起来有多少条数据,这张表对应的 product_id 下就对应几条数据
# 例如首图有两个属性,颜色属性选项有 2 个,尺码属性选项有 9 个,那么该表最大数据为 19 条
CREATE TABLE `product_sku_param`
(
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`product_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '产品ID',
`product_sku_id` int(11) NOT NULL COMMENT '产品SKU ID',
`product_attr_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '产品属性ID',
`product_attr_param_id` int(11) unsigned NOT NULL DEFAULT '0' COMMENT '产品属性选项ID',
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4
COLLATE = utf8mb4_unicode_ci;