数据库范式
1、1NF
要求数据库表中的
列是不可再分裂(原子性)。要求表中每一列只能包含一种数据库,就目前关系型数据库来说,我们不可能设计出不满足1NF 。如下图可能不满足1NF,因为信息列可能可以再分多种数据类型。
用户表 | ||
编号 | 名字 | 信息(地址,手机号) |
2、2NF
在满足1NF情况下。属性完全依赖主键,
不存在部分依赖。如下表存在部分依赖,分数依赖课程号和学号。不满足2NF。
选课表 | ||
学号 | 课程号 | 分数 |
下图也不满足2NF,应该把分类和商品分开。并且把维护关系交给多的一方。(确定不满足2FN????????????)
商品表 | |||||
商品id | 商品名称 | 单价 | 库存 | 分类名称 | 分类编号 |
3、3NF
在2NF基础上,
不存在传递依赖关系:(关键字段 → 非关键字段x → 非关键字段y)。如下表,学号 →院系 →系主任,不满足3NF。
学生信息 | |||
学号 | 姓名 | 院系名 | 系主任 |
4、BCNF范式
在3NF范式上
,候选码唯一。如下表,候选码可以为身份证号,邮箱,手机号(不为空)。不满足BCNF范式。
员工信息 | |||
员工ID | 身份证号 | 邮箱 | 手机号 |
5、4范式,5范式。。。。。。。。