共计 515 个字符,预计需要花费 2 分钟才能阅读完成。
三范式
第一范式:任何一张表都应该有主键,每个字段是原子性的不能再分。
第二范式:建立在第一范式基础上,另外要求所有非主键字段完全依赖主键,不能产生 部分依赖。
学生编号(PK) | 教师编号(PK) | 学生姓名 | 教师姓名 |
---|---|---|---|
1001 | 1 | 张三 | 王老师 |
1002 | 2 | 李四 | 赵老师 |
1003 | 1 | 王五 | 王老师 |
1001 | 2 | 张三 | 赵老师 |
上表虽然符合第一范式,但违背第二范式,学生姓名、老师姓名都产生了部分依赖,导致数据冗余。
第三范式:建立在第二范式基础上,非主键字段不能 传递依赖 于主键字段。
学生编号(PK) | 学生姓名 | 班级编号 | 班级姓名 |
---|---|---|---|
1001 | 张三 | 1 | 一年一班 |
1002 | 李四 | 2 | 一年二班 |
1003 | 王五 | 3 | 一年三班 |
1004 | 赵六 | 3 | 一年三班 |
上表因为产生了传递依赖,导致班级名称冗余。
表设计
一对多(学校 – 学生):一对多两张表,多的表加外键。
多对多(学生 – 课程):多对多三张表,关系表加外键。
一对一第一种方案:主键共享。
hid(主键) | hname |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王五 |
wid(主键 + 外键) | wname |
---|---|
1 | 小花 |
2 | 小兰 |
3 | 小红 |
一对一第二种方案:外键唯一。
hid(主键) | hname |
---|---|
1 | 张三 |
2 | 李四 |
3 | 王五 |
wid(主键) | wname | hid(外键 +unique) |
---|---|---|
1 | 小花 | 1 |
2 | 小兰 | 2 |
3 | 小红 | 3 |
最终设计以满足客户需求为原则,有的时候会拿空间换速度。
正文完