MySQL 三范式


MySQL 三范式

第一范式(1NF):表中的每列的属性不可再分

比如:

学号(主键)姓名性别就读信息
20200101张三大一,土木工程

上表中可以看到,(就读信息)这一列,其实还可以分解成(年级)和(专业),因此(就读信息)这一属性还可以再分,故不满足第一范式

修改成:

学号(主键)姓名性别年级专业
20200101张三大一土木工程

第二范式(2NF):在第一范式的基础上,表里的非主键属性必须都依赖于主键(联合主键)

比如:

学号(主键)课程(主键)教师姓名成绩学生姓名专业
20200101C语言程序设计老张80张三计算机科学与技术
20200102JAVA程序设计老李87李四网络工程
20200103数据结构老王90王五软件工程

上表中可以看到,(教师姓名、成绩)两个属性都依赖于(学号)和(课程),但是(学生姓名、专业)这两个属性却只依赖于(学号),不依赖于(课程),即 只需要知道(学号)便可以知道(学生姓名和专业两个属性),所以,导致非主键属性(学生姓名、专业)不完全依赖于主键(学号、课程),故不符合第二范式

修改成:

学号(主键)课程(主键)教师姓名成绩
20200101C语言程序设计老张80
20200102JAVA程序设计老李87
20200103数据结构老王90

学号(主键)学生姓名专业
20200101张三计算机科学与技术
20200102李四网络工程
20200103王五软件工程

第三范式(3NF):在第二范式的基础上,表中的非主属性不可以存在依赖关系

学号(主键)姓名性别年级专业班主任姓名班主任性别班主任年龄
20200101张三大一计算机科学与技术老张33
20200102李四大二网络工程老李34
20200103王五大三软件工程老王35

上表中可以看到,非主键属性都依赖于(学号),满足了第二范式。但是(班主任性别、班主任年龄)这两个属性都是直接依赖于(班主任姓名)这一属性的,与(学号)属于间接依赖,这就导致了表中的非主键属性存在着依赖关系,不符合第三范式

学号(主键)姓名性别年级专业
20200101张三大一计算机科学与技术
20200102李四大二网络工程
20200103王五大三软件工程

班主任姓名(主键)班主任性别班主任年龄
老张33
老李34
老王35

文章作者: Alex
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Alex !
评论
  目录