数据库系统概论期末经典大题讲解(范式提升、求闭包、求主码)

上一次我们介绍了数据库中关系代数查询,从选择、投影到连接等操作符,探索了数据库查询
大家可以移步我的文章:数据库系统概论期末经典大题讲解(用关系代数进行查询)-CSDN博客
今天,我们将继续沿着数据库系统的精髓探索之路,深入研究数据库系统概论中的经典大题:范式、闭包和主码。让我们深入挖掘这些概念,并为期末考试做好充分准备


目录

一.范式提升

1NF

2NF 

3NF

BCNF

综合例子: 

二.求闭包

三.求主码


一.范式提升

1NF

关系R中每个分量都是不可分割的数据项,则R属于1NF

2NF 

定义 若R属于1NF,且每个非主属性完全函数依赖于码,则称R属于2NF。 

 该关系模式属于1NF,不属于2NF。 因为有非主属性部分函数依赖于码:

  • 非主属性Sdept、 Sloc部分函数依赖于码

方法:

非主属性有两种: 一种完全依赖于码;

                           一种部分依赖于码 --- 将其分出 

就是完全依赖的单独作为一个关系模式,部分依赖的将部分依赖费主码和非主属性作为一个关系模式

 可变为SC(SNO, CNO, G)    S-L(SNO, SDEPT, SLOC)  此时便是2NF

3NF

定义:若R属于2NF, 且它的任何一个非主属性都不传递依赖于任何候选码,则R属于3NF

(不能有传递依赖)

上述例子存在  SNO->SDEPT   ,  SDEPT->SLOC (存在传递依赖了,不是3NF)

规范化过程中通过一组投影分解消除传递依赖,建议作如下分解(第二步分解):

已知关系R(A,B,C), A为主码(A->B, A->C),且B->C,     

则将R分解成为两个投影:         R1(B,C), B为主码         R2(A,B), A为主码,B为外码

 据此可分解为:SC(SNO, CNO, G)    S-L1(SNO, SDEPT,)  S-L2(SDEPT, SLOC)

BCNF

关系模式R中每一个决定因素都包含(或是)码,则R属于BCNF 

综合例子: 

某书店购书情况汇总登记表 :

根据分析可以得到一组函数依赖: F={ NO→C#,C#→CN,C#→CA,B#→BN,B#→EU,B#→UP,(NO,B#) →QUA },表中(NO,B#)为关键字

 先升级为2NF

    

再分解为3NF

            


二.求闭包

在关系模式R<U, F>中为F所逻辑蕴含的函数依赖的全体叫做F的闭包,记为F+

 

设F为属性集U上的一组函数依赖,X属于U, X+F={A|X ->A能由Armstrong公理导出}, X+F称为属性集X关于函数依赖F的闭包

步骤: 

 eg:

 


三.求主码

设关系模式R<U, F> (1) 将R的所有属性分为 L、 R、N和 LR四类 

1.   

  • L类: 仅出现在F的函数依赖左部的属性;    
  • R类: ………………………...右…………;    
  • N类: 在F的函数依赖左右两边都不出现的属性;    
  • LR类: …………………………都出现的属性

2.

  • 开始求L类中单个属性的闭包 ,如果最后结果是全部属性,那个那个属性即为主码
  • 所有单个属性都不能达到结果,那就开始找多个属性结合的闭包(从2到n慢慢增加,直到结果是全部属性)
  • 如果L类中用完了都不行,那就加上N类属性,先加一个,不行在增加。
  • 如果L+N都不行,最后加上LR类吧(当然老师不会出那么复杂的,一般顶多加上N类就行了)

 

eg:

设关系模式R(A, B, C, D, E, P), 其函数依赖集:     F={A→D, E→D, D→B, BC→D, DC→A}    

求R的所有候选码。

解:  L类: C, E          

R类:          

N类: P            

LR类: A, B, D

因为(CEP)F+=CEPDBA,所以CEP是R的唯一候选码


那么今天就先到这里了,之前写博客都是用富文本,今天发现好多符号都不能打出,影响大家的观感,只能截图进来,看来要去学习学习markdown了。希望下次能学会markdown来有更好的格式吧

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/209680.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《python每天一小段》--12 数据可视化《1》

欢迎阅读《Python每天一小段》系列&#xff01;在本篇中&#xff0c;将使用Python Matplotlib实现数据可视化的简单图形。 一、概念 Matplotlib是一个流行的Python数据可视化库&#xff0c;它提供了丰富的绘图功能&#xff0c;可以创建各种类型的图表&#xff0c;包括折线图、…

Spring框架学习:Bean生命周期

目录 SpringBean的生命周期 Bean实例属性填充 三级缓存 常用的Aware接口 Spring IoC容器实例化Bean总结 SpringBean的生命周期 Spring Bean的生命周期是从 Bean 实例化之后&#xff0c;即通过反射创建出对象之后&#xff0c;到Bean成为一个完整对象&#xff0c;最终存储到…

【MyBatis系列】MyBatis字符串问题

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

SpringBoot + Spring Cloud Alibaba + Nacos实现服务管理

1、参考文档 Spring Cloud Alibaba参考文档 https://spring-cloud-alibaba-group.github.io/github-pages/hoxton/zh-cn/index.html Spring Cloud Alibaba官方文档 https://github.com/alibaba/spring-cloud-alibaba/wiki/ 2、引入 Alibaba 依赖 每个 SpringBoot 都有对应的…

css中2D和3D的区别

CSS中2D和3D的主要区别在于&#xff1a; 维度不同&#xff1a;2D是二维平面&#xff0c;3D是三维空间。可视角度不同&#xff1a;2D只能从一个平面角度看&#xff0c;而3D可以在多个角度上观察。技术难度不同&#xff1a;3D效果需要更复杂的技术支持&#xff0c;如矩阵变换&am…

javascript实现Stack(栈)数据结构

上一篇文章我们理解了List这种数据结构&#xff0c;知道了它的特点和一些使用场景&#xff0c;这篇文章我们就来看一下栈这种数据结构&#xff0c;这里的栈可不是客栈哦&#xff0c;哈哈 栈其实和List非常像&#xff0c;使用javascript实现都是基于数组来实现 尝试理解Stack …

6种常见的JS模块打包器

前言 JS模块打包器是一种工具&#xff0c;它可以将多个JS文件或模块合并成一个或多个输出文件&#xff0c;以便在浏览器或其他环境中使用。 JS模块打包器的作用有&#xff1a; 优化代码&#xff1a;通过压缩、混淆、删除无用代码等方式&#xff0c;减少代码的体积和复杂度&…

windows系统和虚拟机上ubuntu系统通过虚拟串口进行通信

本文的目的是实现windows系统和虚拟机上安装的ubuntu通过串口进行通信。为了直观观测串口收发数据的内容&#xff0c;需要在windows系统和ubuntu系统使用串口助手来进行监听。windows系统端用的监听工具是串口助手SSCOM&#xff0c;ubuntu系统端使用的串口助手是CuteCom。 ubu…

OpenCL学习笔记(一)开发环境搭建(win10+vs2019)

前言 异构编程开发&#xff0c;在高性能编程中有重要的&#xff0c;笔者本次只简单介绍下&#xff0c;如何搭建简单的开发环境&#xff0c;可以供有需要的小伙伴们开发测试使用 一、获取opencl的sdk库 1.使用cuda库 若本机有Nvidia的显卡&#xff0c;在安装cuda库后&#x…

如何提高大模型在超长上下文的表现?Claude实验表明加一句prompt立即提升效果~

本文来自DataLearnerAI官方网站&#xff1a;如何提高大模型在超长上下文的表现&#xff1f;Claude实验表明加一句prompt立即提升效果~ | 数据学习者官方网站(Datalearner)https://www.datalearner.com/blog/1051701947131881 Claude 2.1版本的模型上下文长度最高拓展到200K&am…

【Flink系列四】Window及Watermark

3.1、window 在 Flink 中 Window 可以将无限流切分成有限流&#xff0c;是处理有限流的核心组件&#xff0c;现在 Flink 中 Window 可以是时间驱动的&#xff08;Time Window&#xff09;&#xff0c;也可以是数据驱动的&#xff08;Count Window&#xff09;。 Flink中的窗口…

c jpeg YUV图片帧分割成 8*8 块 ,与逆向把8*8还原为帧

1. 正向分割为若干8*8 块 下面的程序为通用程序&#xff0c;可以分割任意块 #include <stdlib.h> #include <string.h> #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h>…

如果微软20年前开发.net core,JAVA会不会和IE一样倒下了

可以跨平台&#xff0c;大量类库&#xff0c;微软亲自操刀&#xff0c;性能一流&#xff0c;因为没有做跨平台&#xff0c;.NET被 python,javascript等抢了一半以上市场。 如果微软早早的推出类似.net core这样的跨平台语言&#xff0c;.net程序猿还会出在这样的尴尬局面吗众所…

Java基础-开发流程以及HelloWorld程序

目录 1. Java的开发流程2. HelloWorld 1. Java的开发流程 开发Java程序&#xff0c;需要三个步骤&#xff1a;编写代码&#xff0c;编译代码&#xff0c;运行代码 2. HelloWorld 编写代码 public class HelloWorld {public static void main(String[] args) {System.out.pri…

Ribbon 饥饿加载

Ribbon默认是采用懒加载&#xff0c;即第一次访问时才会去创建LoadBalanceClient&#xff0c;请求时间会很长而饥饿加载则会在项目启动时创建&#xff0c;降低第一次访问的耗时&#xff0c;通过下面配置开启饥饿加载: 一、懒加载 Ribbon 默认为懒加载即在首次启动Application…

代码随想录二刷 |二叉树 | 二叉树的层序遍历

代码随想录二刷 &#xff5c;二叉树 &#xff5c; 二叉树的层序遍历 题目描述解题思路代码实现 题目描述 102.二叉树的层序遍历 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 示例…

Flask 最佳实践(一)

Flask是一个轻量级而强大的Python Web框架&#xff0c;它的简洁性和灵活性使其成为许多开发者的首选。然而&#xff0c;为了确保项目的可维护性和可扩展性&#xff0c;我们需要遵循一些最佳实践。本文将探讨Flask中一些关键的最佳实践。 1. 项目结构 构建一个清晰的项目结构是…

Java实现Socket聊天室

一、网络编程是什么&#xff1f; 在网络通信协议下&#xff0c;不同计算机上运行的程序&#xff0c;进行数据传输。 应用场景&#xff1a;即时通讯、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景&#xff0c;都是计算机与计算机之间通过网络进行数据传输。 …

软件测试之接口测试自动化(详解版)

本着以和大家交流如何实现高效的接口测试为出发点&#xff0c;本文包含了我在接口测试领域的一些方法和心得&#xff0c;希望大家一起讨论和分享&#xff0c;内容包括但不仅限于&#xff1a; 服务端接口测试介绍接口测试自动化介绍接口测试自动化实践关于接口测试自动化的思考…

质量工程化,交付快速化

质量和速度之间权衡让人很难取舍&#xff0c;而通过推进质量工程&#xff0c;以系统化的方式识别和优化系统痛点&#xff0c;可以帮助团队构建既快又好的精益软件生产系统。原文: Quality Engineered, Speed Delivered 所有人都想要更快的速度。 但需要解决复杂问题: 权衡质量会…