首页 > 数据库 >数据库复习

数据库复习

时间:2023-06-15 20:33:17浏览次数:58  
标签:BCNF 依赖 复习 数据库 R1 分解 属性 函数

列出下图所示关系满足的所有非平凡的函数依赖(忽略蕴含的函数依赖)。
A B C
a1 b1 c1
a1 b1 c2
a2 b1 c1
a2 b1 c3
做题之前搞清几个概念:

  • 函数依赖:X和Y是关系R的两个属性集合,当任意时刻R中任意两个元组的X属性相同时,则Y也必定相同。我们就说X->Y或Y依赖X
  • 平凡&非平凡函数依赖:设一个关系为R(U),X和Y为属性集U上的子集,如果X->Y并且X不包含Y,则称X->Y为非平凡函数依赖;否则若X包含Y,则必有X->Y,则称为平凡函数依赖。
    现在依据上面的概念来做这道题目
    首先看A属性,当A确定时,发现B也会完全相同。并且A并不包含B,所以A->B是一个非平凡的函数依赖。
    之后再看B属性,当B属性确定时,发现并没有哪个属性是必定相同的。所以B不存在函数依赖
    最后看C属性,当C属性确定时,发现B属性被确定,则C->B也是一个非平凡函数依赖。
    所以最后答案为A->B和C->B

假设有关系模式R(A,B,C,D,E),其函数依赖集F={A→BC,CD→E,B→D,E→A}
列出R的所有候选码。

  • 码就是键。超键=码。即可以唯一标识一条记录的属性或属性集
  • 候选键=候选码,即能够唯一标识一条记录的最小属性集
  • 主键=主码,从候选码中人为的选择一条
    所以根据上述概念来看,如果要找到所有候选码,那就要从超键里进一步挑选,先找到所有超键。
    而判断属性集合是否为超键,还要先了解如何寻找属性集的闭包,如果闭包中包含所有属性,那么就是超键。闭包求解比较好理解,不再阐述。
    当考虑一个属性的超码后,发现A和E是超码,那么因为候选码是最小属性集,所以A和E将不会出现在两个属性的候选码中,不再考虑。
    同样方法,最终求得BC、CD是两个属性的超码。此时不再存在更大的候选码。
    综上,候选码为A、E、BC、CD

假设有关系模式R(A,B,C,D,E),其函数依赖集F={A→BC,CD→E,B→D,E→A}
计算正则覆盖Fc。

  • 正则覆盖中任何函数依赖都不包含无关属性。无关属性的定义很形象,例如AB->C,如果你认为此函数依赖中A是无关属性,也就是说有无A都可以推导出这个函数依赖,那么形式化可以写为(F-{AB->C}∪{B->C}),如果F逻辑蕴涵上述内容,那么就说明A是无关属性。
  • 正则覆盖中函数依赖的左半部分是唯一的
    以本题为例,阐述求解函数依赖的过程:
    1.右侧化为单属性(阿姆斯特朗定理逆用)
    2.去除左侧无关属性
    3.去除冗余函数依赖
    4.合并
    1686478874603.jpg
    综上,F的正则覆盖其实就是自己。

考虑如下关系模式R(A,B.C.D,E,F)上的函数依赖集F:
{A→BCD,BC→DE,B→D,D→A}
计算B的闭包。
求属性集合的闭包十分简单,直接写答案:
{A,B,C,D,E}

考虑如下关系模式R(A,B.C.D,E,F)上的函数依赖集F:
{A→BCD,BC→DE,B→D,D→A}
(使用Armstrong公理)证明AF是超码。
证明某个属性集合是超码,其实就是验证其闭包含有所有属性。而求闭包则应用到阿姆斯特朗定理
直接求AF的闭包即可:
{A,B,C,D,E,F}包含全部属性,所以是超码

考虑如下关系模式R(A,B.C.D,E,F)上的函数依赖集F:
{A→BCD,BC→DE,B→D,D→A}
计算上述函数依赖集F的正则覆盖;给出你的推导的步骤并解释。(直接写答案)
{A->BC,B->DE,D->A}

考虑如下关系模式R(A,B.C.D,E,F)上的函数依赖集F:
{A→BCD,BC→DE,B→D,D→A}
基于正则覆盖,给出R的一个3NF分解。
分解分为BCNF分解和3NF分解,本题讲述如何3NF分解。
如果要求解3NF分解,首先要求解函数依赖集的最小依赖,而最小依赖其实就是正则覆盖,所以即求解正则覆盖即可
求解正则覆盖后,观察所有函数依赖的左右两侧,如果出现有属性从未出现过,则单独分为一个子集。之后按照函数依赖,将一个函数依赖的左右两侧属性合并,并为一个子集。
其实就是3NF分解,但一般题型都要求无损连接性与保持函数依赖,所以还要有最后一步。
我们要在上一步求解出的3NF分解后添加候选码,候选码就是从两侧均未出现的元素和未出现在右侧的属性,最终合并得正确答案。
1686484044127.jpg
上述最后一步中,我们发现此时F属性从未出现过,而AF正好就是候选码,所以我们直接添加到最后,得到最终答案即可。

image.png
首先审题得知,要求给出无损链接并保持依赖的3NF分解,即最终要加入候选码。
第一步求出F的正则覆盖就是其本身。
第二步寻找是否存在N类属性。求解发现不存在,所以按照已有函数依赖左侧右侧并集划分为若干子集。{ABC},{CDE},{BD},{EA}
第三步,因为题目要求特殊,最终还要加入候选码。首先寻找有无L类属性或两侧均未出现属性,发现没有。则无需添加
综上,最终答案为{ABC},{CDE},{BD},{EA}

考虑如下关系模式R(A,B.C.D,E,F)上的函数依赖集F:
{A→BCD,BC→DE,B→D,D→A}
利用原始的函数依赖集,给出R的一个BCNF分解。
BCNF分解较为复杂,资料不太详细,暂时理解过程如下:
首先要知悉如何判断R满足BCNF与否。方法如下:

  • 若R的函数依赖集合中存在某函数依赖左侧不存在候选码中的其一,则R不符合BCNF,需要进行分解
    在进行第一次分解时,按照如下方式分解为R1和R2:
  • 若R中存在若干函数依赖不符合BCNF,则任选其一开始分解(此类题答案不唯一的原因)
  • 如本题从A->BCD开始进行分解,则R1即为左右两侧属性的集合{A,B,C,D};R2集合则为R与选择函数依赖右侧属性集合的差集{A,E,F}
  • 在进行第一步分解后,就需要检验R1与R2此时是否符合BCNF,而检验是否符合BCNF的标准此时是,从R1和R2中各选择其属性子集,进行如下验证:若选取的子集的闭包不包含Ri与选取子集的差集中的任意属性或选取子集的闭包包含Ri的所有属性,则符合BCNF。若不符合BCNF,则需要进一步分解
  • 若经过一次分解过后的R仍然不符合BCNF,则之后的分解方式如下:以R1中的属性子集{A}检验出不符合BCNF为例,求解A属性的闭包与R1的交集,将A属性与交集单独分解为一个子集。另外再将除A闭包以外的所有属性与A单独再分为一个子集。则完成了进一步分解,此时再重复上一步骤,判断分解结果是否都满足BCNF。直至满足为止

image.png
首先求解R的候选码,不难得出候选码为A、E、BC、CD。
第一步,从函数依赖集合中找一条不满足BCNF的函数依赖。F中只有B->D不满足。则选择该条函数依赖进行分解。将R分解为{B,D}与{ABCE}
第二步,判断R1与R2是否符合BCNF要求。{B,D}的属性子集为{B}&{D},分别求解闭包,得知第一子集满足包含R1所有属性,第二子集闭包满足只包含自身,均无问题。所以{BD}符合BCNF要求。求解R2的属性子集{A}{B}{C}{E}。第一和第四子集均符合包含R2所有属性,第二第三子集均符合闭包只含自身。所以也符合BCNF要求。综上所述最终R的BCNF分解即为{B,D}与{A,B,C,E}

image.png
无损分解的判定也十分简单,只需遵循以下内容即可:

  • 首先需要求解函数依赖集的闭包,利用阿姆斯特朗定理
  • 求解完毕后,只要R1∩R2->R1或R1∩R2->R2在闭包中,那么就是无损分解
  • 其实还有更简单的方式,只要R1∩R2是R1或R2的超码,那么分解就是一个无损分解
    上述题目中,R1∩R2={A},而A的闭包则正好是{A,B,C,D,E},满足是R1或R2的超码,所以是一个无损链接分解。

image.png
同样按照上述方式判断。R1∩R2={C},C的闭包为{C},所以并不能成为R1或R2的超码,即分解并不是无损分解

标签:BCNF,依赖,复习,数据库,R1,分解,属性,函数
From: https://www.cnblogs.com/appletree24/p/17484045.html

相关文章

  • OA系统核心业务逻辑审批流程数据库是如何设计的 leave_application请假内容表 leave_
    OA系统核心业务逻辑审批流程数据库是如何设计的leave_application请假内容表leave_approve抄送人经办人同意拒绝表leave_notice同意/拒绝通知接收人表https://blog.csdn.net/rulaixiong/article/details/124688056officeautomation翻译成中文就是:办公自动化。所以......
  • 数据库遇见的一些问题
    1.什么时候一个主码可以确定多个实体?gpt:在一般情况下,一个主码应该是用于确定一个实体的唯一标识。主码的目的是确保数据库中的实体具有唯一性,避免数据冗余和不一致。然而,在某些特定的情况下,一个主码可能会用于确定多个实体。一种情况是在多租户(Multi-Tenancy)系统中,其中多个租......
  • 数字逻辑电路 复习笔记
    挑战从零开始学习数电(1/3)Ch1数制与码制1.1数制基数(\(R\)进制)位权(\(X^0,X^1,X^2,...\))1.2码制带符号的二进制数的编码原码:正数符号位0,负数符号位1,数值不变反码:整数符号位不变,其余取反;纯小数符号位不变,其余取反\(+0.1101\Rightarrow0.1101\)\(-0.1101\Rightarr......
  • 数据库配置参数
    innodb_buffer_pool_size和query_cache_size`innodb_buffer_pool_size`和`query_cache_size`是MySQL的两个重要配置参数,它们对数据库性能和缓存机制起着关键作用。1.`innodb_buffer_pool_size`:该参数指定了InnoDB存储引擎使用的内存缓冲池的大小。内存缓冲池是用来缓存数据和索......
  • 02项目数据库隐藏密码,封装logger,环境变量的设置,封装全局异常,Response,开启media访问,前
    1项目数据库之隐藏密码#我们直接把mysql的用户名和密码写死在了代码中----》后期可能会存在风险----》代码如果泄露----》mysql的用户密码泄露----》可以远程登录----》脱裤(拖库)----》所有数据会被黑客获取到----》卖钱#华住---》在代码中把数据库用户名和密码写死了----》......
  • delphi7使用rave5.0展现数据库数据报表
    时隔多年,回头再次拿起Delphi。使用Delphi7展现Rave设计的报表,尝试了很多次,目前仅掌握的两种方式:①不在delphi程序中设置数据库连接组件,直接调用Rave报表文件展现,获取数据是在rave文件中设置数据库连接并完成的(DriverDataView)。(这种还需要补充加载驱动解决程序无法执行的问题)②......
  • 利用VMware安装centos7+docker部署Oracle数据库
    由于本机资源有限,docke容器能够利用最小资源实现目前需求准备:VMware、centos镜像文件VMware安装centos后,设置网络桥接模式,联通外网,为安装docker准备执行:首先,将docker部署再虚拟机内,(新机器直接安装,若安装过旧版本需要卸载,请参考https://www.runoob.com/docker/centos-docker-i......
  • 考前复习——最短路
    Floyd十分暴力方便的最短路算法虽然复杂度较高,但好在有最短路的图都可以用它解决(即无负环)intn,m;//n个节点m条边intmp[N][N];voidinit_floyd(){ for(inti=1;i<=n;i++) { for(intj=1;j<=n;j++) { mp[i][j]=Inf; } mp[i][i]=0; }}voidfloyd(){ fo......
  • 2023年6月中国数据库排行榜:OceanBase 连续七月踞榜首,华为阿里谋定快动占先机
    群雄逐鹿,酣战墨坛。 2023年6月的 墨天轮中国数据库流行度排行 火热出炉,本月共有273个数据库参与排名。本月排行榜前十变动不大,可以用一句话概括为:OTO组合连续两月开局,传统厂商GBase南大通用乘势而上,其余数据库暂居原位。本月排行榜解读文章 「专家观点」 板块邀请到科大讯......
  • MySQL 数据库表字段字符集编码不一致导致隐式转换索引失效案例分析
       有网友咨询,丢过来一段sql语句,说是执行一次耗时10多分钟,让帮忙看看。表数据量在5万左右,数据量不大,首先确认表统计信息都是准确的,查询sql以及执行计划如下:  可以看到嵌套循环join部分全表扫描,缺失索引,应该在join条件列hoist_code、device_code建立索引,但是网友反馈......