数据库函数依赖以及范式

一、为什么数据库需要规范化?

  • 数据库规范化是为了减少数据库中的数据冗余,增进数据的一致性
  • 现在数据库设计最多满足3NF。因为普遍认为范式过高,虽然具有对数据关系更好的约束性,但也导致数据关系表增加而增加成本。

二、函数依赖

1.部分函数依赖

  • 在一个关系R中,X,Y是关系R的两个属性集合,存在X→Y,若X‘是X的真子集,存在X’→Y,则称Y部分函数依赖于X。

2.完全函数依赖

  • 在一个关系R中,X,Y是关系R的两个属性集合,X’是X的真子集,存在X→Y,但对每一个X’都有X’!→Y,则称Y完全函数依赖于X。

3.传递函数依赖

  • 在一个关系R中,X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。

三、关系的规范化

1.第一范式(1NF)

在这里插入图片描述

  • 满足以上条件即为第一范式。

2.第二范式(2NF)

  • 满足1NF

  • 每一个非码属性完全依赖于任何一个候选码(在第一范式的基础上消除非码属性对于候选码的部份依赖)

  • 例:关系模式R(A,B,C,D) 函数依赖F{(A,B)->C,A->D}

  • 候选码:AB

  • 不是2NF,因为A->D,即存在非码属性对于候选码的部份依赖

  • 改进为2NF:R1(A,B,D) R2(A,D)

3.第三范式(3NF)

  • 满足2NF
  • 不能存在非码属性对码的传递依赖
  • 例:R(A,B,C,D) F{ A->BC,B->D}
  • 候选码:A
  • 不是3NF,因为 A->B,B->D,即存在非码属性对码的传递依赖
  • 改进为3NF:R1(A,B,C)R2(B,D)

4.BC范式(BCNF)

  • 满足3NF
  • 决定因素都包含候选码。
  • 例:R(A,B,C,D,F)F{(A,B)->C,(A,B)->E,(C,D,E)->AB}
  • 候选码:ABD,CDE
  • 不是BCNF,因为 (A,B)->C,AB是决定因素,但不包含候选码,即存在非码属性对码的传递依赖
  • 改进:
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值