MySQL基础之多表之间的关系

2.6 多表之间的关系

MySQL基础之多表之间的关系_第1张图片

如上图所示,实际业务数据库中的表之间都是有关系的,我们接下来主要要学习的就是如何分析表关系及建立表关系。

1)分类表

create table category(

cid varchar(32) primary key,

cname varchar(100)

);

 

2)商品表

create table product(

pid varchar(32) primary key,

pname varchar(40),

price double

);

 

3)订单表

create table orders(

oid varchar(32) primary key,

totalprice double

);

 

4)订单项表

create table orderitem(

oid varchar(50),

pid varchar(50)

);

2.6.1 表与表之间的关系

表与表之间的关系,说的就是表与表之间数据的关系。

一对一关系

常见实例:一夫一妻

一对多关系

常见实例:会员和订单

多对多关系(需要中间表实现)

常见实例:商品和订单

 

2.6.2 外键

如何表示表与表之间的关系呢?就是使用外键约束表示的。

要想理解外键,我们先去理解表的角色:主表和从表(需要建立关系才有了主从表的角色区分)

主从表的理解:

MySQL基础之多表之间的关系_第2张图片

现在我们有两张表分类表商品表

目前从表的声明上来说,没有关系,但是我们有个需求:

商品应该有所属的分类,这个时候需要将分类表和商品表建立关系,如何建立?

按照以上需求分析:

主表是:商品表。主表中,应该有一个字段去关联从表,而这个关联字段就是外键。

从表是:分类表。从表中,应该有一个字段去关联主表,而这个关联字段就是主键。

主键外键的理解:

MySQL基础之多表之间的关系_第3张图片

如何操作外键:

主表添加外键的格式:

alter table 表名 add [constraint][约束名称] foreign key (主表外键字段) references

(从表主键)

主表删除外键的格式:

alter table 表名 drop foreign key 外键约束名称

使用外键目的:

保证数据完整性(数据保存在多张表中的时候)

在互联网项目中,一般情况下,不建议建立外键关系。

2.6.3 一对一关系(了解)

在实际工作中,一对一在开发中应用不多,因为一对一完全可以创建成一张表

案例:一个丈夫只能有一个妻子

建表语句:

CREATE TABLE wife(

id INT PRIMARY KEY ,

wname VARCHAR(20),

sex CHAR(1)

);

CREATE TABLE husband(

id INT PRIMARY KEY ,

hname VARCHAR(20),

sex CHAR(1)

);

一对一关系创建方式1外键唯一

添加外键列wid,指定该列的约束为唯一(不加唯一约束就是一对多关系

ALTER TABLE husband ADD wid INT UNIQUE;

 

添加外键约束:

alter table husband add foreign key (wid) references wife(id);

 

一对一关系创建方式2主键做外键:(课后作业)

思路:使用主表的主键作为外键去关联从表的主键

 

2.6.4 一对多关系

案例:一个分类对应多个商品

总结:

有外键的就是多的一方。

注意事项:

一对多关系和一对一关系的创建很类似,唯一区别就是外键不唯一。

一对多关系创建:

  1. 添加外键列
  2. 添加外键约束

案例:

1. 在商品表中添加一条记录,该记录的cid在分类表中不存在

2. 在分类表中,删除一条记录,这条记录在商品表中有外键关联

 

2.6.5 多对多关系

案例:同一个商品对应多个订单,一个订单对应多个商品

MySQL基础之多表之间的关系_第4张图片

注意事项:

需要中间表去完成多对多关系的创建

多对多关系其实就是两个一对多关系的组合

 

多对多关系创建:

创建中间表,并在其中创建多对多关系中两张表的外键列

在中间表中添加外键约束

在中间表中添加联合主键约束

用户和角色

1个用户对多个角色

1个角色对多个用户

中间表用户角色表 uid rid

 

耐心的读者可以继续观看我下一篇文章:MySQL多表关联查询

你可能感兴趣的:(Mysql)