热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

数据库范式学习之2,3,BCNF

2NF:若R是1NF,且每一个非主属性,完全函数依赖于码,则R属于2NF。下面举一个不是2NF的例子。关系模式S-L-C&#

2NF:
若R是1NF,且每一个非主属性,完全函数依赖于码,则R属于2NF。
下面举一个不是2NF的例子。
关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade)
其中Sloc为学生的住处,并且每一个系的学生住在同一个地方。S-L-C的码为
(Sno,Cno)。函数依赖有:
(Sno,Cno)->Grade是完全函数依赖。
Sno,Sdept,(Sno,Cno)->Sdept是部分函数依赖。
Sno,Sloc,(Sno,Cno)->Sloc是部分函数依赖。
因此上面的设计不是2NF。
一个关系模式不属于2NF就会出现下面的错误。
1.插入异常
如果要插入一个学生Sno,Sdept,Sloc但是这个学生没有选课,没有Cno那么就不能插入,因为Cno是码的一部分。
2.删除异常
如果一个学生就选了一门课,当他退选这门课的时候,我们就要把这个学生的信息一并删除掉。
3.修改复杂
如果学生从一个系转到另个系,并且他选了多门课程,然后他的每一条记录都要修改,就会产生修改复杂。
我们可以把上面的关系模式修改成其他的关系模式。
SC(Sno,Cno,Grade)
SL(Sno,Sdept,Sloc)
SC关系模式的码为(Sno,Cno),关系模式S-L的码为Sno,这样就使得非主属性对码都是完全函数依赖。
3NF:
若R属于3NF,则每一个非主属性既不部分依赖于码也不传递依赖于码。
在上面的SC和SL中,SC满足3NF,但是SL关系模式不属于3NF。
解决的办法是将S-L分解
SD(Sno,Sdept)
DL(Sdept,Sloc)
分解后的关系模式S-D和D-L不再存在传递依赖。
BCNF
满足BCNF的关系模式有下面三个特点。
1.所有非主属性对每一个码都是完全函数依赖。
2.所有的主属性对每一个不包含它的码,也是完全函数依赖。
3.没有任何属性完全函数依赖于非码的任何一组属性。
由于R属于BCNF,按照定义排除了任何属性对码的传递依赖。所以R属于3NF.
下面我们介绍一个属于3NF但是不属于BCNF的例子。
在关系模式STJ(S,T,J)中,S表示学生,T表示教师,J表示课程。每一个教师只教一门课程。每门课有若干教师,某一个学生选定一门课就对应一个固定教师。由语义可得到如下的函数依赖。
(S,J)->T;(S,T)->J;T->J用图6.6表示。
这里(S,J),(S,T)都是候选码
如果把(S,J)作为主码,它属于3NF但是它不属于BCNF,因为T不是主码但是它可以决定J。


推荐阅读
  • 本文详细介绍了如何正确配置Java环境变量PATH,以确保JDK安装完成后能够正常运行。文章不仅涵盖了基本的环境变量设置步骤,还提供了针对不同操作系统下的具体操作指南。 ... [详细]
  • 本文将详细介绍通过CAS(Central Authentication Service)实现单点登录的原理和步骤。CAS由耶鲁大学开发,旨在为多应用系统提供统一的身份认证服务。文中不仅涵盖了CAS的基本架构,还提供了具体的配置实例,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 使用R语言进行电力消耗时间序列预测:多项式回归与ARIMA模型的应用
    本文探讨了如何利用温度预测和时间序列分析技术,通过R语言中的多项式回归和ARIMA模型来预测电力消耗。文章详细介绍了数据处理、模型构建及预测结果的可视化。 ... [详细]
  • 如何在SQL Server 2008中通过Profiler跟踪特定数据库及获取客户端信息
    本文介绍如何利用SQL Server Profiler工具来监控特定数据库的操作,并获取执行这些操作的客户端计算机名和账户名。步骤包括创建新的跟踪、配置跟踪属性以及设置列筛选器以精确过滤数据。 ... [详细]
  • 本文介绍了如何使用JFreeChart库创建一个美观且功能丰富的环形图。通过设置主题、字体和颜色等属性,可以生成符合特定需求的图表。 ... [详细]
  • 解决ArcGIS中Shapefile图层空洞问题的方法
    本文介绍了一种有效的方法来修复ArcGIS中Shapefile图层存在的空洞问题。对于少量空洞,可以通过手动修补的方式解决;而对于大量空洞,则建议使用Geodatabase的拓扑关系进行批量修复。 ... [详细]
  • 解决Hive操作无响应问题:drop table和create table的处理方法
    本文详细介绍了在Hive中执行drop table和create table命令时遇到无响应的情况,并提供了完整的解决方案。通过调整MySQL字符集编码,确保Hive数据库与MySQL之间的兼容性,从而有效解决问题。 ... [详细]
  • 深入解析Spring Cloud微服务架构与分布式系统实战
    本文详细介绍了Spring Cloud在微服务架构和分布式系统中的应用,结合实际案例和最新技术,帮助读者全面掌握微服务的实现与优化。 ... [详细]
  • 本文探讨了现代分布式架构的多样性,包括高并发、多活数据中心、容器化、微服务、高可用性和弹性架构等,并介绍了与这些架构相关的重要管理技术,如DevOps、应用监控和自动化运维。文章还深入分析了分布式系统的核心概念、主要用途及类型,同时对比了单体应用与分布式服务化的优缺点。 ... [详细]
  • 如何从python读取sql[mysql基础教程]
    从python读取sql的方法:1、利用python内置的open函数读入sql文件;2、利用第三方库pymysql中的connect函数连接mysql服务器;3、利用第三方库pa ... [详细]
  • TortoiseSVN与VisualSVN Server的安装及基本操作指南
    本文详细介绍了如何安装VisualSVN Server以及TortoiseSVN客户端,并提供了基本的操作步骤,包括配置仓库、用户管理及权限设置等关键环节。 ... [详细]
  • Linux环境下MySQL查询结果导出及ERROR 1290 (HY000) 解决方案
    本文详细解析了在Linux系统中使用MySQL导出查询结果时遇到的ERROR 1290 (HY000)错误,并提供了有效的解决策略。通过调整配置文件或更改导出路径,可以轻松解决这一常见问题。 ... [详细]
  • Servlet过滤器入门:实现与配置
    本文介绍如何在Java Web应用中实现和配置Servlet过滤器,通过实现`javax.servlet.Filter`接口来创建过滤器,并详细说明其在web.xml文件中的配置方法。 ... [详细]
  • 本文详细介绍了会计学专业的课程设置,包括基础课程、核心课程及选修课程,旨在为学生提供全面的学习指南,帮助他们更好地规划学业。 ... [详细]
  • 本文探讨了天才与疯子之间的微妙界限,介绍了如何利用巨人的工具提升自我,以及如何通过科学决策、数据洞察和智慧的尺度来指导我们的生活和工作。 ... [详细]
author-avatar
784485886_fe0643
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有