【数据库】3范式+BCNF

1NF

符合数据表的原子性

通俗的说:第一范式就是每个属性不可再分

  • 表中同一列的数据类型相同
  • 一个列名只能对应一列
  • 并且每一类不可再分
  • 每一行的数据互不影响
例子
编号代表作演员公司名称发表时间
1《yewens》张三、李四幸福里公司、演好戏公司2021-11-15
2《chuangtian》王二爆笑喜剧公司2021-11-15

显然第一行不符合数据表的原子性。

修改后【拆列】:

编号代表作演员公司名称发表时间
1《yewens》张三幸福里公司2021-11-15
2《yewens》李四演好戏公司2021-11-15
3《chuangtian》王二爆笑喜剧公司2021-11-15

2NF

第二范式在第一范式的基础上消除了非主属性对于主属性部分函数依赖

通俗的说:第二范式就是表中的非主属性必须完全依赖于主属性。【消除了部份依赖,保留了完全依赖】

完全依赖是指不能存在仅依赖候选键一部分的属性

属性

码是可以确定一个元组的所有信息的属性名或属性名组。

例如在 { a, b, c, d } 中,
假设知道 a 的值就能确定  a, b, c, d  的值,
假设知道 c, d 的值就可以确定  a, b, c, d  的值,
那么 { a } 就是码,{ c, d } 就是码。
并且 { a, b }, { a, c }, { a, b, c }, { a, b, c, d } 等也都是码,因为它们也可以确定一个元组的所有值,即使很多余

``候选码` 候选码的真子集中不存在码,候选码可以有多个

就上面的例子而言,{ a } 是候选码,{ c, d } 是候选码,因为它们的真子集中不存在码。 
而诸如 { a, b } 并不是候选码,因为它的真子集中含有 { a }, 且 { a } 是码。

主码就是主键的意思,主码是任意一个候选码

还是上面的例子,主码是候选码 { a }, { c, d } 中的其中一个。
既可以是 { a }, 也可以是 { c, d }。 

主属性包含在任何一个候选码中的属性

非主属性不包含在任何候选码中的属性

主码\subseteq候选码\subseteq

例子[理解概念]

学生基本信息表(学号,身份证号,姓名),学号取值唯一

(学号,身份证号)-> 姓名

(身份证号)-> 姓名

(学号)-> 姓名

所以姓名部分函数依赖于(学号,身份证号)

所以只有一个主属性的表如果符合第一范式,那一定是第二范式

判断2NF
  • 找出数据表中所有的候选键
  • 找出所有主属性和非主属性
  • 判断所有的非主属性对候选键的部份依赖
例子[学会做题]

学生信息表(sno,系别,住处,cno,分数)

(sno,cno)可以组成候选键

系别,住处,分数 不是候选键的一部分,是非主属性

分数依赖于(sno,cno),系别依赖于sno,住处依赖于sno

​ (sno,cno)->分数 完全依赖

sno -> 系别,(sno,cno)-> 系别 部分依赖

sno -> 住处,(sno,cno)-> 住处 部分依赖

系别 -> 住处 每个系的学生只住一个地方

所以非主属性部分依赖于候选键,不满足2NF

不满足2NF会出现的问题
  • 插入异常
  • 删除异常
  • 修改复杂

3NF

第三范式就是指表中的所有数据元素不但要能唯一地被主关键字所标识,而且它们之间还必须相互独立,不村子啊其他的函数关系。

通俗的说:在2NF的基础上消除传递函数依赖

传递函数依赖指的是如果存在“A->B->C”的决定关系,则C传递函数依赖于A。

例子[理解概念]
名称专辑发表时间专辑类别
《非白》《理想》2020/1/5录音室版本
《梧桐》《梧桐》2018/10/30录音室版本

显然

名称->专辑

专辑->(发表时间,专辑类别)

所以名称 -> (发表时间,专辑类别)(发表时间,专辑类别) 传递依赖与 名称

不满足3NF

优点

消除了数据冗余,更新异常,插入异常,删除异常

BCNF

消除主属性对主键的部分于传递依赖

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小源同学r

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

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

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

打赏作者

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

抵扣说明:

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

余额充值