# 设计品牌和分类关系表

产品是有所属分类和品牌的,先设计这两张表

# 品牌表

# 品牌表 ER 图

image-20200604210829879

  • 商标图片:存地址

  • 首字母:

    在搜索的时候,列出的品牌,可以按这个首字母顺序排列。

可见,设计数据库的人,要懂业务、也要懂前端

# 品牌表结构图

image-20200604211023017

create table t_brand
(
    id     int unsigned primary key auto_increment comment '主键',
    `name` varchar(200) not null comment '名称',
    image  varchar(500) comment '图片网址',
    letter char(1)      not null comment '单位(量词语)',
    unique unq_name (`name`),
    index idx_letter (letter)
) comment ='品牌表';

1
2
3
4
5
6
7
8
9
10
  • name :品牌名唯一

  • letter:首字母

    由于需要按首字母搜索品牌,所以给一个索引

# 分类表

苏宁易购全部分类页

image-20200604211722057

可以看到,它的分类有三个层级。分类这种类似与链表结构。有父节点的标识

# 商品分类表 ER 图

image-20200604211943017

  • 分类名称:可重复
  • 父节点:顶级节点没有父
  • 是否为父节点:如果有子,则为 false
  • 排名指数:相当于搜索的权重

# 商品分类表结构图

image-20200604212817714

create table t_category
(
    id        int unsigned primary key auto_increment comment '主键',
    `name`    varchar(200) not null comment '分类名称',
    parent_id int unsigned comment '上级分类ID',
    if_parent tinyint(1)   not null comment '是否包含下级分类',
    sort      int unsigned not null comment '排名指数',
    index idx_parent_id (parent_id),
    index idx_sort (sort)
) comment ='商品分类表';
1
2
3
4
5
6
7
8
9
10

对于索引的创建,是考虑到后续使用者,经常用到的。后续业务做调整了再来增加索引也可以。

# 分类与品牌关联表

一个品牌可以有多个分类,一个分类可以分给多个品牌。多对多关系

image-20200604213521317

create table t_category_brand
(
    category_id int unsigned comment '分类 ID',
    brand_id    int unsigned comment '品牌 ID',
    primary key (category_id, brand_id)
) comment ='分类与品牌关联表';
1
2
3
4
5
6

比如:手机分类关联小米、苹果、华为、联想。笔记本关联苹果、华为。

看明白了吗,一个分类下,有哪些品牌在卖此类的东西。

# 三张表的初始数据

INSERT INTO neti.t_brand (id, name, image, letter) VALUES (1, '联想', null, 'L');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (2, '华为', null, 'H');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (3, '小米', null, 'A');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (4, '苹果', null, 'A');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (5, 'OPPO', null, 'O');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (6, '三星', null, 'S');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (7, 'LG', null, 'L');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (8, 'vivo', null, 'V');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (9, '飞利浦', null, 'F');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (10, '红米', null, 'H');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (11, 'IMB', null, 'I');
INSERT INTO neti.t_brand (id, name, image, letter) VALUES (12, '戴尔', null, 'D');

INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (1, '手机/数码/配件', null, 1, 1);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (2, '手机通讯', 1, 1, 1);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (3, '手机', 2, 0, 1);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (4, '手机配件', 1, 1, 2);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (5, '移动电源', 4, 0, 5);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (6, '蓝牙耳机', 4, 0, 2);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (7, '保护壳', 4, 0, 3);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (8, '数码配件', 1, 1, 10);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (9, '存储卡', 8, 0, 10);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (10, '读卡器', 8, 0, 1);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (11, '电脑/办公/外设', null, 1, 1);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (12, '电脑整机', 11, 1, 1);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (13, '笔记本', 12, 0, 1);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (14, '台式电脑', 12, 0, 1);
INSERT INTO neti.t_category (id, name, parent_id, if_parent, sort) VALUES (15, '平板电脑', 12, 0, 1);

INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (3, 1);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (3, 2);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (3, 3);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (3, 4);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (3, 5);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (3, 6);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (3, 8);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (3, 10);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (13, 1);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (13, 2);
INSERT INTO neti.t_category_brand (category_id, brand_id) VALUES (13, 12);
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