MySQL之数据库三大范式

文章目录

  • 一、三大范式
  • 二、举例说明
    • 1NF
    • 2NF
    • 3NF


提示:以下是本篇文章正文内容,Java系列学习将会持续更新

一、三大范式

范式是数据库设计时遵循的一种规范,不同的规范要求遵循不同的范式。

最常用的三大范式

第一范式(1NF):属性不可分割,即每个属性都是不可分割的原子项。(实体的属性即表中的列)

第二范式(2NF):满足第一范式;且不存在部分依赖,即非主属性必须完全依赖于主属性。(主属性即主键;完全依赖是针对于联合主键的情况,非主键列不能只依赖于主键的一部分)

第三范式(3NF):满足第二范式;且不存在传递依赖,即非主属性不能与非主属性之间有依赖关系,非主属性必须直接依赖于主属性,不能间接依赖主属性。(A -> B, B ->C, A -> C)

回到目录…

二、举例说明

1NF

不符合第一范式的表:属性还可以再分割

id name message
001 张三 13岁,五年级
002 李四 14岁,六年级
003 王五 15岁,七年级

修改后的表:每个字段原子性,不可再分割

id name age class
001 张三 13岁 五年级
002 李四 14岁 六年级
003 王五 15岁 七年级

回到目录…

2NF

在满足1NF的前提下,表中不存在部分依赖,非主键列要完全依赖于主键。(主要是说在联合主键的情况下,非主键列不能只依赖于主键的一部分)

注意:这张表中的stu_id和kc_id构成了联合主键。score没问题,它完全依赖于联合主键,stu_id和kc_id两个值才能决定score的值。但是kc_name只依赖于kc_id,这是部分依赖关系,不符合第二范式。

stu_id (学号) kc_id (课程号) score (分数) kc_name (课程名)
001 101 85 高数
001 102 79 C语言
002 101 79 高数

修改后的表:分为两张表,每张表都符合第二范式。

stu_id (学号) kc_id (课程号) score (分数)
001 101 85
001 102 79
002 101 79
kc_id (课程号) kc_name (课程名)
101 高数
102 C语言

回到目录…

3NF

在满足2NF的前提下,不存在传递依赖。(A -> B, B -> C, A->C)

sex_desc不直接依赖于主键,而是通过依赖于非主键列而依赖于主键,属于传递依赖,不符合3NF。(id -> sex_code -> sex_desc)

id name sex_code sex_desc phone
001 张三 1 178XXXXXXXX
002 李四 1 177XXXXXXXX
003 王五 0 188XXXXXXXX

修改后的表:分为两张表,每张表都符合第三范式。

id name sex_code phone
001 张三 1 178XXXXXXXX
002 李四 1 177XXXXXXXX
003 王五 0 188XXXXXXXX
sex_code sex_desc
1
0

回到目录…


总结:
提示:这里对文章进行总结:
以上就是今天的学习内容,本文是MySQL的学习,认识了数据库的三大范式,并且可以分辨表属于第几范式。之后的学习内容将持续更新!!!

你可能感兴趣的:(MySQL,Linux,Git,数据库,mysql,java)