数据库三大范式

1、第一范式(1NF)

符合1NF 关系中的每个属性都不可再分。属性不可再分是指每一个字段都是最小的,不包含其他字段。

如上表就不满足第一范式,将联系方式这一列划分为电话号码和地址两列才符合第一范式。

2、第二范式(2NF)

表一:

2.1、第一范式存在问题:

如上表满足第一范式,但是仍然存在如下问题:

  • 数据冗余:为了统计某人的科目成绩,将一个人的id,姓名,系别等内容重复统计;
  • 插入异常:若想新建一个系,但是此时系无学生,主键为空不可创建;
  • 删除异常:若想删除上表“陆沉”的全部信息,就变相把金融系删除了,不符合实际;
  • 修改问题:若想修改学生系别,则需要同时修改该生所有信息的系名系主任;

由此,产生第二范式解决以上问题。

2.2、第二范式概念

在1NF基础上,消除了非主属性部分函数依赖

  • :一个表中,可以唯一决定一个元组的属性 集合 。假设k为表中的某个属性,如果在k确定了的情况下,这个表里面的其他属性都可以确定,那么k叫做候选码,也叫作码。
  • 主属性:存在于码中的属性。
  • 非主属性:表中去除主属性的属性。
  • 函数依赖:对于函数y=f(x),给定一个x的值,y值也是确定的。在数据表中,属性x确定,比能确定y 的值,说明y函数依赖于x。写作x->y,如表中存在 学号->姓名;
  • 完全函数依赖:在一张表中,若x->y,,且对于x的任何一个真子集都不能单独推出y,那么称y对x完全依赖。
  • 部分函数依赖:在一张表中,若x->y,,但存在x的一个真子集能推出y,那么称y对x部分依赖。

对于表1,(id,课名) 可以决定唯一的一行,所以该表的码是(id,课名)这个属性组;

主属性:id 和 课名

非主属性: 姓名、系名、系主任、分数

在上表中,只用id可以决定姓名、系名、系主任;所以姓名、系名、系主任对于码是部分依赖,

而分数对码是完全依赖。所以此表不符合2NF。

若将表拆分成如下两表,两表均符合2NF。

表二:

表三:

当然如果是主属性就一个就不存在部分依赖了。

3、第三范式(3NF)

3.1 第二范式存在问题

第二范式减少了数据冗余情况和修改异常的问题,如果西药修改学生系别对于满足第二范式的表来说只需要修改一行数据,但是对于插入异常、删除异常依然存在问题。

 3.2 第三范式概念

        3NF 在2NF 的基础上,消除了非主属性对于码的传递函数依赖。也就是说,如果存在非主属性对于码的传递函数依赖,则不符合3NF。

传递函数依赖:如果Y依赖X,Z又依赖于Y,那么 Z传递依赖于X。

 比如表三中系名又依赖于学号,系主任依赖于系名,那么系主任传递依赖于学号,不满足3NF。

将表三继续拆分为表四、表五:即满足3NF。

表四:

 表五:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值