数据库三大范式详解实例图文教程


title: 数据库三大范式详解实例图文教程
date: 2021-09-04 20:29:31
tags:

  • 数据库
  • MySQL
    categories:
  • 数据库
    cover: https://cover.png
    feature: false

需要用到的例表:
在这里插入图片描述

1. 名词概念

1.1 函数依赖

A --> B,如果通过A属性(属性组)的值,可以确定唯一属性B的值,则称属性B依赖于A

如:学号 --> 姓名 (学号唯一确定姓名)                      1001 --> 张三
(学号,课程名称)--> 分数 (学号和课程名称唯一确定分数) (1001,Java) --> 89

1.2 完全函数依赖

A --> B,如果A是一个属性组,则B属性确定需要依赖于A属性组中的所有属性值

如:(学号,课程名称)–> 分数 (分数需要完全依赖于学号和课程才能得出)

1.3 部分函数依赖

A – > B,如果A是一个属性组,那么B属性只需要依赖A属性组中的一些值即可

如:(学号,课程名称)–> 姓名

1.4 传递函数依赖

A --> B,B --> C,则A --> C。通过A属性(属性组)的值,可以确定唯一B属性的值,通过B属性的值,可以确定唯一的C属性的值,则称 C 传递依赖于 A

如:学号 --> 系名,系名 --> 系主任,则学号 --> 系主任(通过学号,可以确定唯一的系主任)

1.5 码

在一张表中,一个属性或属性组,被其他所有属性所完全依赖,则称这个属性(属性组)为该表的码

如:该表的码为:(学号,课程名称)
其中,姓名,系名,系主任,都完全依赖于学号,而分数则完全依赖于(学号,课程名称)。(学号,课程名称)被其他所有属性所完全依赖,即为该表的码

2. 三大范式概念简述

第一范式(1NF):每一列都是不可分割的原子数据项
第二范式(2NF):在满足第一范式的前提下,表中的每一个字段都完全依赖于主键。即在1NF的基础上,消除非主属性对主码的部分函数依赖,非码属性必须完全依赖于码属性
第三范式(3NF):在满足第二范式的前提下,表中的每一列都直接依赖于主键,而不是通过其他的列来间接依赖主键。即不得传递依赖于主键,在2NF基础上,消除传递依赖

3. 具体实现

在这里插入图片描述
存在问题:

  1. 数据冗余:姓名,系名,系主任
  2. 添加新系时,数据不合法。
  3. 删除张三同学的数据时,系也删除了

3.1 转换为2NF,消除部分函数依赖,全为完全函数依赖

由前面所说:姓名,系名,系主任都完全依赖于学号,而分数完全依赖于学号和课程名称,将其分为两个表

在这里插入图片描述
化简:
在这里插入图片描述
现存问题:
1. 数据冗余,姓名,系名,系主任
2. 添加新系时,数据不合法。
3. 删除张三同学的数据时,系也删除了

3.2 转换为3NF,消除传递函数依赖

由前面所说,学号 --> 系名,系名 --> 系主任,再将其分为两个表,一共三个表

在这里插入图片描述
现存问题:
1. 数据冗余,姓名,系名,系主任
2. 添加新系时,数据不合法。
3. 删除张三同学的数据时,系也删除了

结尾:由此,问题全部解决,同时也由1NF转换为2NF,再转换为3NF

  • 9
    点赞
  • 91
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Fan 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值