多表关系
概述
各个表结构之间也存在着各种联系,基本上分为三种:
- 一对多(多对一)
- 多对多
- 一对一
一对多(多对一)
案例:部门 与 员工的关系
关系:一个部门对应多个员工,一个员工对应一个部门
实现:在多的一方面建议外键,指向一的一方的主键(可以结合上个笔记)
多对多
案例:学生 与 课程的关系
关系:一个学生可以选修多门课程,一门课程也可以供多个学生选择
实现:建立第三张中间表,中间表至上包含两个外键,分别关联两方主键
创建一张 student 表, 并插入内容
1 | -- 创建学生表 多对多案例 |
创建一张 course 表
1 | -- 创建课程表 |
创建学生课程中间表对两张表进行 外键 关联
1 | CREATE TABLE student_course( |
其中 coursed 对应 course (id), studentid 对应 student (id)。
三张表结构中,定义了
id INT AUTO_INCREMENT
,表示id
字段是自增主键这里的
NULL
是专门为自增主键设计的占位符,不是表示”空值”,而是告诉MySQL”请自动生成ID值”。
一对一
案例: 用户 与 用户详情的关系
关系:一对一关系,用于单表拆分,将一张表的基础字段放在一张表中,其他详情字段放在另一张表当中,以提升操作效率
实现:在任意一方加入外键,关联另外一方的主键,并且设置外键为 **唯一 ** 的(UNIQUE)
假设有一张超大信息表,我们将其拆分为两张表内容如下,然后进行 1 对 1
1 | -- 创建用户基本信息表 |
值得注意的是:上表设置 userid 外键,它所关联的就是 tb_user(id),并且设置了约束 唯一 UNIQUE, 确保 1 对 1
向两张表注入相应的信息:
1 | -- 向用户基本信息表(tb_user)插入数据 |
最后完成了:一方加入外键,关联另外一方的主键,并且设置外键为 **唯一 ** 的(UNIQUE)
硬看不如实践