多表之间的关系
如上图所示,实际业务数据库中的表之间都是有关系的,我们接下来主要要学习的就是如何分析表关系 及建立表关系。
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)
);
表与表之间的关系
表与表之间的关系,说的就是表与表之间数据的关系。
- 一对一关系
常见实例:一夫一妻
- 一对多关系
常见实例:会员和订单
- 多对多关系(需要中间表实现)
常见实例:商品和订单
外键
如何表示表与表之间的关系呢?就是使用外键约束表示的。
要想理解外键,我们先去理解表的角色:主表和从表(需要建立关系才有了主从表的角色区分)
- 主从表的理解
现在我们有两张表“分类表”和“商品表”。
目前从表的声明上来说,没有关系,但是我们有个需求:
商品应该有所属的分类,这个时候需要将分类表和商品表建立关系,如何建立?
按照以上需求分析:
主表是:商品表。主表中,应该有一个字段去关联从表,而这个关联字段就是外键。
从表是:分类表。从表中,应该有一个字段去关联主表,而这个关联字段就是主键。
- 主键外键的理解
- 如何操作外键
主表添加外键的格式:
alter table表名 add [constraint][约束名称] foreign key (主表外键字段) references从 表(从表主键)
主表删除外键的格式:
alter table表名 drop foreign key外键约束名称
使用外键目的:
保证数据完整性(数据保存在多张表中的时候)
在互联网项目中,一般情况下,不建议建立外键关系。
一对一关系(了解)
在实际工作中,一对一在开发中应用不多,因为一对一完全可以创建成一张表
案例:一个丈夫只能有一个妻子
- 建表语句:
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);
一对多关系
案例:一个分类对应多个商品
总结:
有外键的就是多的一方。
注意事项:
一对多关系和一对一关系的创建很类似,唯一区别就是外键不唯一。
一对多关系创建:
- 添加外键列
- 添加外键约束
案例:
- 在商品表中添加一条记录,该记录的cid在分类表中不存在
- 在分类表中,删除一条记录,这条记录在商品表中有外键关联
多对多关系
案例:同一个商品对应多个订单,一个订单对应多个商品
- 注意事项:
需要中间表去完成多对多关系的创建
多对多关系其实就是两个一对多关系的组合
- 多对多关系创建:
创建中间表,并在其中创建多对多关系中两张表的外键列
在中间表中添加外键约束
在中间表中添加联合主键约束
用户和角色
1个用户对多个角色
1个角色对多个用户
中间表用户角色表 uid rid