1、一对多
定义
- 案例:员工表为子表,部门表为父表
- 一对多关系实现:在数据库表中多的一方,添加字段,来关联一的一方的主键。
外键语法
-- 创建表时指定 create table 表名( 字段名 数据类型, ... [constraint] [外键名称] foreign key (外键字段名) references 主表 (字段名) ); -- 建完表后,添加外键 alter table 表名 add constraint 外键名称 foreign key (外键字段名) references 主表(字段名);
外键约束
物理外键
- 概念:使用 foreign key 定义外键关联另外一张表。
- 缺点:
- 影响增、删、改的效率(需要检查外键关系)。
- 仅用于单节点数据库,不适用与分布式、集群场景。
- 容易引发数据库的死锁问题,消耗性能。
逻辑外键(推荐)
- 概念:在业务层逻辑中,解决外键关联。
- 通过逻辑外键,就可以很方便的解决上述问题。
2、一对一
定义
- 案例: 用户 与 身份证信息 的关系
- 关系: 一对一关系,多用于单表拆分,将一张表的基础字段放在一张表中,其他字段放在另一张表中,以提升操作效率
- 实现:
在任意一方加入外键,关联另外一方的主键,并且设置外键为唯一的(UNIQUE)
3、多对多
- 案例: 学生 与 课程的关系
- 关系: 一个学生可以选修多门课程,一门课程也可以供多个学生选择
- 实现:
建立第三张中间表,中间表至少包括两个外键,分别关联两方主键
4、多表查询
介绍
- 多表查询: 指从多张表中查询数据
- 笛卡尔积: 笛卡尔乘积是指在数学中,两个集合(A集合 和 B集合)的所有组合情况(
在多表查询时,需要消除无效的笛卡尔积
)
内连接
语法
- 隐式内连接:select 字段列表 from 表1 , 表2 where 条件 … ;
- 显式内连接:select 字段列表 from 表1 [ inner ] join 表2 on 连接条件 … ;
来自上海