一、概念
范式(NF NormalForm)就是指需要遵循的设计规则;
范式越高,设计质量越高,但难度越大,通常我们讲三范式,实际不止三种;
二、三范式
2.1、一范式
原则:列不可分(原子性)
举例:下面表一中的家庭地址
列通常是可以继续拆分,这样更便于地址的分层管理(当然也不排除有此类细节)
用户名 | 家庭地址 |
---|---|
张三 | 广东省广州市xxx区xxx街道xxx号 |
用户名 | 省份 | 城市 | 详细地址 |
---|---|---|---|
张三 | 广东省 | 广州市 | xxx区xxx街道xxx号 |
2.2、二范式
原则:表不可分,一张表只存一种类型数据(不建议多对多
关系数据混合)
举例:下例中将学生信息
与课程信息
混在一张表中,一个学生可以选择多门课程,一门课程也可以对应多个学生,这样不太合理,实际应该拆分为学生表
、课程表
、关系表
3张,来实现学生与课程的多对多关系;
学号 | 姓名 | 课程编号 | 课程名称 |
---|---|---|---|
1 | 张三 | 1 | 语文 |
2 | 李四 | 1 | 语文 |
1 | 张三 | 2 | 数学 |
2 | 王五 | 2 | 数学 |
4 | 赵六 | 1 | 语文 |
2.3、三范式
原则:表不可分,(不建议一对多
关系数据混合)
举例:下例中将学生信息
与班级信息
混在一张表中,一个学生只能一个班级,一个班级有多个学生,这样也不太合理,实际可以拆成学生表
、班级表2
张,通过班级编号作为外键关联,不用过多数据冗余;
学号 | 姓名 | 班级编号 | 班级名称 | 班级名称 |
---|---|---|---|---|
1 | 张三 | 1 | A班 | 普通班 |
2 | 李四 | 1 | A班 | 普通班 |
3 | 王五 | 2 | B班 | 重点班 |
4 | 赵六 | 1 | A班 | 普通班 |