一对一关系
任一表的主键作为另一个表的外键,(或者直接合并为一张表)
表一:学生表student, 学号,姓名,年龄
id | name | age | cid |
1 | 张三 | 38 | 1 |
2 | 李四 | 99 | 2 |
表二:身份证表card,表id,身份证号
id | number |
1 | 423537261534 |
2 | 472895623897 |
一个学生对应一个身份证,一个身份证对应一个学生
可以在任意的一方,添加外键指向另一方的主键
(要保证每个 cid 是唯一的,number是唯一的,需要添加 unique 唯一约束)
如果没特殊限制,可以直接把身份证号,合并到 student 表中,更方便
一对多关系
主键在“一”的那方,多的一方使用外键引用“一”的主键
表一:部门表dep,有部门 id ,和部门名称
did | name |
1 | 财务部 |
2 | 销售部 |
表2:员工表emp,有员工id,姓名,年龄,部门id
eid | name | age | dep_id |
1 | 张三 | 18 | 2 |
2 | 李四 | 19 | 1 |
3 | 王五 | 20 | 2 |
一个员工只有一个部门,一个部门有多个员工。也就是说,多个员工对应一个部门
我们在“一”的一方(部门)建立主键,多的一方引用外键dep_id(员工)
多对多关系
多对多关系,通常需要借助中间表,实现属性的对接
表一:学生表student,学号sid,姓名,年龄
sid | name | age |
1 | 张三 | 17 |
2 | 李四 | 28 |
3 | 王五 | 49 |
表二:课程表class,课程号cid,课程名称
cid | name |
1 | 英语 |
2 | 数学 |
一个学生可以选择多们课程,一个课程可以有多个学生,所以是多对多关系
我们需要借助一张或多张中间表,如这里增加一个选课表
表三:select,分别包含2张表的主键,学号和课程号
sid | cid |
1 | 1 |
1 | 2 |
2 | 2 |
(注意:这里的选课表比较简单,应该要保证每个字段是唯一的)
(可以把学号和选课号作为联合主键,确保非空和避免重复)