范式判断的三个步骤以及各个范式标准(1NF,2NF,3NF,BCNF,4NF)

范式判断的三个步骤

假设我们有关系模式R(A,B,C),函数依赖F={AB->C}

1.检查R中元素的闭包,也就是哪些元素或者元素组合可以根据F中函数依赖关系得到完整的R,这些元素或者元素组合就是候选码。这里AB的闭包是ABC,记作(AB)+=ABC,所以AB是候选码。

2.通过候选码确定主属性和非主属性。这里A,B是主属性,剩下的C就是非主属性。

3.判断范式标准:1NF,2NF,3NF,BCNF,4NF


各个范式定义

1NF:属性不可分割。

例如 关系模式:学生(姓名,住址),而住址又包含(区,街道),所以该模式不符合1NF

2NF:不存在非主属性对候选码的部分依赖。

例如 已知候选码是BC,非主属性是D,函数依赖中除了BC->D,还有B->D或者C->D,该模式不符合2NF

3NF:不存在非主属性对候选码的传递依赖。

例如 已知候选码是AB,非主属性是D,函数依赖中有AB->C和C->D,所以该模式不符合3NF

BCNF:不存在主属性对候选码的部分依赖和传递依赖。

4NF:非主属性不应该有多值依赖


例题

例1.已知R(A,B,C),F={B->C,AC->B}

Step1.通过闭包运算,(AB)+=ABC,(BC)+=ABC,所以候选码是AB,BC

Step2.根据候选码知,A,B,C都是主属性,例1中没有非主属性

Step3.根据范式的定义,至少为3NF(因为不存在非主属性)。现在来判断是否满足BCNF,我们发现存在主属性对候选码的部分依赖B->C,所以不满足BCNF。故例1为3NF


例2.已知R(A,B,C),F={B->C,B->A,A->BC}

Step1.通过闭包运算,(A)+=ABC,(B)+=ABC,所以候选码是A,B

Step2.根据候选码知,A,B都是主属性,剩下的C是非主属性

Step3.不存在非主属性C对候选码的部分/传递依赖,至少为3NF。现在来判断是否满足BCNF,我们发现不存在主属性对候选码的部分/传递依赖,所以满足BCNF。故例2为BCNF


例3.已知R(A,B,C,D),F={AB->D,BC->D,A->C,C->A}

Step1.通过闭包运算,(AB)+=ABCD,(BC)+=ABCD,所以候选码是AB,BC

Step2.根据候选码知,A,B,C都是主属性,剩下的D是非主属性

Step3.不存在非主属性D对候选码的部分/传递依赖,至少为3NF。现在来判断是否满足BCNF,我们发现存在主属性对候选码的部分依赖A->C,C->A,所以不满足BCNF。故例3为3NF


欢迎访问我的博客:https://colinasda.github.io/
随手记录一些计算机相关的知识点以及分享一些资源

  • 60
    点赞
  • 192
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
数据库设计中的范式主要是为了规范化数据,减少数据冗余和数据异常,提高数据的一致性和完整性。常见的范式1NF2NF3NFBCNF4NF等。 1NF(第一范式):数据表中的列都是不可分割的原子数据项。即每个列都只能有一个值,不可再拆分。 例如,一个订单表中的订单编号、客户编号、订单日期、订单金额、商品编号、商品名称、商品数量等列都应该是不可分割的原子数据项。 2NF(第二范式):在1NF的基础上,非主键列对主键列具有完全依赖关系。即非主键列只与主键有关系,而不与其他非主键列有关系。 例如,一个订单详情表中的订单编号、商品编号、商品名称、商品单价、商品数量等列都应该与订单编号有关系,而不与商品名称列有关系,因为商品名称只与商品编号有关系。 3NF(第三范式):在2NF的基础上,消除非主键列之间的传递依赖关系。即非主键列之间不应该存在依赖关系,而是应该通过主键来关联。 例如,一个学生选课表中的学生编号、课程编号、课程名称、教师名称、教室名称等列都应该与学生编号和课程编号有关系,而不应该存在教师名称和教室名称之间的依赖关系。 BCNF(巴斯-科德范式):在3NF的基础上,消除主键列之间的依赖关系。即主键列之间不能存在依赖关系,否则应该拆分成多个表。 例如,一个学生选课表中的学生编号、课程编号、成绩等列都应该与学生编号和课程编号有关系,而不应该存在学生编号和成绩之间的依赖关系。 4NF(第四范式):在BCNF的基础上,消除多值依赖关系。即一个表中的某些列的值可能对应多个值,应该将其拆分成多个表。 例如,一个学生选课表中的学生编号、课程编号、成绩、评价等列都应该与学生编号和课程编号有关系,而不应该存在成绩和评价之间的多值依赖关系。应该将成绩和评价分别拆分成两个表,与学生编号和课程编号关联。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值