基础知识
码=主键码(主属性) 候选码
候选码
能够唯一标识一行数据的列或列的组合,候选码具有一下2个特性
- 唯一性:候选码的值在表中必须是唯一的,即不允许重复值。
- 最小性:不能从候选码中移除任何列而仍然保持唯一性
主键码
主键码是候选码中的一个,一个表可能有多个候选码,可以从其中选择一个作为主键码
例如:学号,姓名,身份证号,手机号,邮箱,其中候选码有学号,身份证号,手机号,邮箱4个,可以选择其中的一个作为主键码
三范式
目的
- 降级数据冗余
- 提高数据一致性
- 减少数据插入、更新和删除操作的复杂性
1nf
列的原子性
举例
- 地址包含省市县区详细信息(对象)
- 学生选择的课程,一个学生可以选择多门课程(数组)
2nf
概念
在1nf基础上,非码属性必须完全依赖与候选码(消除了非主属性对主码
的部分依赖关系)
举例
学号 | 课程编号 | 课程分数 | 代课老师 |
---|---|---|---|
码:学号 课程编号
主属性:学号 课程编号
非码属性:课程分数,代课老师
(学号,课程编号)->课程分数,非码属性课程分数
完全依赖与候选码学号 课程编号
(课程编号)->代课老师,非码属性代课老师
部分依赖于候选码学号 课程编号
代课老师冗余了
3nf
概念
在2nf基础上,任何非主属性不依赖与其他非主属性(消除了传递依赖)
举例
学号(主键) | 姓名 | 所在系(系主键) | 系地址 |
---|---|---|---|
候选码:学号
主属性(主键码):学号
非主属性:姓名,所在系,系地址
满足1nf:列都具有原子性
满足2nf:主属性只有一个,因此不存在部分依赖关系
不满足3nf:非主属性系地址
依赖与非主属性所在系
系地址冗余了
直接函数依赖
(学号)->所在系
(所在系)>系地址
传递函数依赖
(学号)->系地址