三大范式是Mysql数据库设计表结构所遵循的规范和指导方法,目的是减少冗余,建立结构合理的数据库,从而提高数据存储和使用的性能。
三大范式存在依赖关系,第二范式依赖第一范式,第三范式依赖第二范式。
1. 第一范式:数据库中每个列都必须是原子性的,每个列都不能再分为更小的数据项。同时,每个表必须有一个主键,标识每条记录的唯一性。
错误示例:
学生 | 课程 |
---|---|
张三,男,18岁 | java |
李四,男,18岁 | java |
学生字段违反了第一范式,可以细分,并且没有唯一主键
改良后:
学生表:学生id、姓名、性别、年龄
学生课程表:学生id、课程
2. 第二范式:表中的非主键列必须完全依赖于主键,而不是依赖主键的一部分(存在联合主键的情况)。
错误示例:
学生选修课表:学生id、年龄、课程、学分、成绩
成绩依赖于课程和学号,存在联合主键(学生id+课程)。学分依赖于课程。年龄依赖于学生。
改良后:
学生表:学生id、年龄
课程表:课程、学分
学生成绩表:学生id、课程、成绩
3. 第三范式:非主键列之间不存在依赖关系。
错误示例:
学生院系表:学生id、姓名、所在院系、院系地址
院系地址依赖所在院系,所在院系依赖学生,存在传递依赖
改良后:
学生院系表:学生id、姓名、所在院系id
院系地址表:院系id、院系地址