3NF和BCNF

本文深入探讨了数据库理论中的关键概念,包括候选码、超码、依赖保持、无损连接分解等。通过具体实例阐述了如何从BCNF(平凡依赖、超码依赖)到3NF(属性依赖于候选码)的转换过程,强调了在数据库设计中遵循这些原则的重要性,确保数据的一致性和高效查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

R的依赖集闭包中,任一关系A->B,如果:

1)依赖是平凡的;

2)A是R的一个超码;

则是BCNF,满足无损连接,但不一定依赖保持。

 

如果不满足1)2),但满足:

3)B-A中每个属性都在R的一个候选码中;

则是3NF,满足无损连接,又满足依赖保持。

 

基本概念:候选码、超码、依赖保持、无损连接分解。参见《数据库系统概念》

转载于:https://www.cnblogs.com/zhaoyl/archive/2012/10/01/2709507.html

当一个关系表满足3NF(第三范式),意味着它已经消除了非主属性对于候选键的传递依赖关系。下面是一个例子: 假设我们有一个关系表 "学生课程成绩",包含学生的学号(主键)、课程号(主键)、学生姓名、课程名称成绩。 | 学号 | 课程号 | 学生姓名 | 课程名称 | 成绩 | |------|--------|----------|----------|------| | 1 | 1001 | 张三 | 数学 | 90 | | 2 | 1002 | 李四 | 英语 | 80 | | 3 | 1001 | 王五 | 数学 | 85 | 在这个例子中,我们可以观察到存在非主属性 "课程名称" 对于候选键 "课程号" 的传递依赖。也就是说,通过课程号可以传递依赖到课程名称。为了满足3NF,我们需要将这个关系表进行分解。 我们可以分解成两个表: 学生表(学号、学生姓名): | 学号 | 学生姓名 | |------|----------| | 1 | 张三 | | 2 | 李四 | | 3 | 王五 | 课程表(课程号、课程名称): | 课程号 | 课程名称 | |--------|----------| | 1001 | 数学 | | 1002 | 英语 | 成绩表(学号、课程号、成绩): | 学号 | 课程号 | 成绩 | |------|--------|------| | 1 | 1001 | 90 | | 2 | 1002 | 80 | | 3 | 1001 | 85 | 现在,我们可以通过主键(学号课程号)将学生表、课程表成绩表关联起来,消除了传递依赖,同时满足了3NF。 如果我们进一步要求满足BCNF(Boyce-Codd范式),我们需要检查是否存在非主属性对于候选键的完全依赖关系。在上述例子中,课程表的非主属性(课程名称)完全依赖于候选键(课程号),因此也满足BCNF。 通过使用3NFBCNF范式,可以提高数据库的规范性结构化程度,减少数据冗余更新异常的发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值