理解数据库 1NF 2NF 3NF BCNF

参考文章写的非常不错,给自己解惑了
参考文章:

https://www.zhihu.com/question/24696366

首先是范式的定义

范式是“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”

下面从第一范式(1NF)逐级上升解释

第一范式

1NF的定义为:符合1NF的关系中的每个属性都不可再分。

EG:
这里写图片描述
以上的表并不满足1NF,易见 进货、销售两列是可再分的

1NF存在的问题有

  1. 数据冗余过大
  2. 插入异常
  3. 删除异常
  4. 修改异常

    如对表
    这里写图片描述

1.可见,姓名、等重复了很多次,此为数据冗余过大

2.假设学校新建了某一个系,但是暂时没有招收学生,那么就无法将系名和系主任的数据单独的添加进表(学生、学号等为空),此为插入异常
3.假设将经济系的学生全部删除,那么也将经济系本身也删除掉了,但是显然这是不符合逻辑的,此为删除异常
4.假设学生小明要转系,那么就需要将前3条关于小明的数据的系名、系主任等全部修改,以保证数据库中数据的一致性,此为修改异常

综上,为去掉以上4个问题,需要修改原先的设计。

第二范式

2NF的定义为:NF在1NF的基础之上,消除了非主属性对于码的部分函数依赖。

需要明白的关键字有: 主属性、非主属性、码、部分函数依赖、函数依赖。

函数依赖:若在属性(或属性组)X的值确定的情况下,必定能确定属性Y的值,那么就说Y函数依赖于X,写作X → Y,也即,在表里不存在2条数据,它们的X值相等而Y却不相等。为何叫函数依赖可以和数学上的函数定义相比较,f(x)在x的值确定的情况下,y的值就为确定的。

完全函数依赖:若对X → Y,若X的任何一个真子集’X’ → Y不成立,即称X → Y为完全函数依赖,也就是说X中没有一项是多余的,去掉任何一个属性X → Y就不成立了。
部分函数依赖:与函数依赖相对应的,X → Y中X存在冗余属性。

码(键):设X为该表中的一个属性或属性组,若该表中除X之外的其余所有属性完全函数依赖于X
,也即X → Y,X+Y为表的所有属性,那么就称X为候选码,简称为码。一张表中可以存在多个码,实际应用中通常选择其中一个码为主码来唯一标识一个元组。

主属性:包含在任何一个码中的属性即为主属性。
非主属性:相对主属性而言的。

那么为了将1NF升级为2NF,就需要去除表中存在的非主属性对码的部分函数依赖。

第一步:找出数据表中所有的码。
第二步:根据第一步所得到的码,找出所有的主属性。
第三步:数据表中,除去所有的主属性,剩下的就都是非主属性了。
第四步:查看是否存在非主属性对码的部分函数依赖。

怎样消除部分函数依赖呢?唯一可行的方法就是将原先的表进行拆分,此过程即为模式分解,注意,分解的方法不是唯一的。

待更新~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值