三大范式(原子性,唯一性,不可传递性)
三大范式是数据库设计表结构所遵循的规范和指导方法;目的:减少冗余和错误发生的机率,提高使用性能和数据存储。
第一范式:字段不可再分
例如:
身份证地址:北京市海淀区某某小区
可以分为:北京市——海淀区——某某小区
此时,在获取身份地址信息时就会降低效率,增加错误率。所以不建议进行再分。
第二范式:在第一范式的基础上,非主属性(非主键)必须完全依赖于主属性。
例如:
选课编号和课程编号同时作为主键,如果要查询学生的身份信息,需要主键同时调用进行查询才能准确查询到学生的身份信息。
选课编号 | 课程编号 | 课程名称 | 身份信息 | 学号 |
1 | 1 | 奥数 | 410185020020302305 | 13213 |
2 | 1 | 奥数 | 410185020020302305 | 46456 |
3 | 2 | 英语 | 410185020020302305 | 45618 |
4 | 2 | 英语 | 410185020020302305 | 84566 |
此时,遇到这种情况就需要考虑分表的情况。其中一个表为:课程编号+选课编号+数量
另一个表可为:选课编号+信息(比如身份信息等)。这种情况适用于字段较多和访问频率较高的情况。
第三范式:在第二范式的基础上,不存在传递依赖,即非主属性不能与非主属性之间有依赖关系。(A->B,B->C,A!->C)
例:课程名称,身份信息,学号之间不能有依赖关系。