多表关系
关系
- 一对一
- 一对多
- 多对多
- 需要中间表实现
外键
- 如何表示表与表之间的关系呢?就是使用外键约束表示的
- 要想理解外键,我们先去理解表的角色:主表和从表(需要建立关系才有了主从表的角色区分)
- 主表:应该有一个字段去关联从表,而这个关联字段就是外键
- 从表:应该有一个字段去关联主表,而这个关联字段就是主键
- 使用外键的目的:
- 保证数据完整性(数据保存在多张表中的时候)
在互联网项目中,一般情况下,不建议建立外键关系。
操作外键
- 主表添加外键的格式
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);
- 添加外键列wid,指定该列的约束为唯一(不加唯一约束就是一对多关系)
- 方式2:主键做外键
一对多关系
- 有外键的就是多的一方
- 对多关系和一对一关系的创建很类似,唯一区别就是外键不唯一
关系创建
- 添加外键列
- 添加外键约束
多对多关系
需要中间表去完成多对多关系的创建
多对多关系其实就是两个一对多关系的组合
关系创建
- 创建中间表,并在其中创建多对多关系中两张表的外键列
- 在中间表中添加外键约束
- 在中间表中添加联合主键约束
- 例如:
- 用户和角色
- 1个用户对多个角色
- 1个角色对多个用户
- 中间表用户角色表 uid rid
- 用户和角色