数据库三范式简述及例子

文章目录

    • 1NF
      • 1NF问题
    • 2NF
      • 解决
      • 2NF问题
    • 3NF
      • 解决
    • 说明

1NF

关系中的每个属性不可再分。

比如这张表有这些属性:

id 姓名 年级 疫情打卡
时间 次数 连续次数

因上面签到可再分,不满足第一范式,可优化成:

id 姓名 年级 打卡时间 打卡次数 打卡连续次数

该表满足1NF。

1NF问题

数据冗余、增删改异常。

eg:

id 姓名 院系 辅导员 课程 课程分数
2017210575 小明 软件工程 老王 高数 70
2017210575 小明 软件工程 老王 英语 71
2017210576 小红 通信工程 老张 高数 80
2017210576 小红 通信工程 老张 英语 81
  1. 该表其实只改了课程和课程分数,id 姓名 院系 辅导员 数据冗余
  2. 若学生(比如小明)毕业,删数据有问题,可能变成此表,主键不为空就报错删不了
id 姓名 院系 辅导员 课程 课程分数
软件工程 老王
软件工程 老王
2017210576 小红 通信工程 老张 高数 80
2017210576 小红 通信工程 老张 英语 81
  1. 若增数据(比如增加院系),院系没人(主键为空),增加时会报错。

  2. 若改数据(比如转系),要改好几个数据。

2NF

1NF基础上消除非主属性对码的部分函数依赖。

eg:

学生表:

sid 姓名 院系 辅导员

课程表:

cid 课程名 课程分数

解决

相对1NF,解决了数据冗余、更改异常

2NF问题

学生表

​ 插入院系,主键还是空的

id 姓名 院系 辅导员 课程 课程分数
搬砖系

​ 删除这个系(搬砖系只有1人),院系依赖那个人,所以这个院系就没了。

id 姓名 院系 辅导员 课程 课程分数
2017211444 小刚 搬砖系 老刚 搬砖 90

3NF

2NF基础上消除非主属性对码的传递函数依赖。

eg:

学生表:

学生id 姓名 院系

院系表:

院系 系主任

课程表:

学生id 课程名 课程分数

解决

相对于2NF,解决了插入、删除(变成空表)

说明

名称 解释 eg
一个表中,可以唯一决定一 个元组的属性“集合”。 id-----姓名,系名,辅导员
课----分数
(id,课名)这个属性组就叫做码。
函数依赖 在数据表中,在属性X确定的情况下,必定能确定Y的值,那就说明Y函数依赖于X,写作X→Y。 学号----系名
学号----系主任
(学号,课名)—成绩
完全函数依赖 在一张表中,若X→Y,且对于X的任何一个真子集(假如属性组X包含超过一个属性的话), X’→Y不成立,那么我们称Y对于X完全函数依赖,记作XF→Y。 (学号,课名)—成绩
成绩依赖学号和课名
部分函数依赖 如果Y函数依赖于X,但是Y不完全函数依赖于X,那就叫做部分函数依赖。 (学号,课名)—姓名
姓名依赖于学号,不依赖课名
传递函数依赖 如果Y依赖于X,Z又依赖于Y,那就说Z依赖于X。 ∵学号—院系
院系—系主任
∴学号—院系,系主任
系名依赖于学号,系主任依赖于系名,那么系主任传递函数依赖于学号。不满足3NF

你可能感兴趣的:(数据库)