数据库实战(一)(关系数据库设计)

🌈 个人主页:十二月的猫-CSDN博客
🔥 系列专栏: 🏀数据库

💪🏻 十二月的寒冬阻挡不了春天的脚步,十二点的黑夜遮蔽不住黎明的曙光 

目录

前言

练习题

题型一:判断关系模式属于第几范式(在BCNF内判断)

题型二:求最小依赖集(正则覆盖)

题型三:求闭包(求属性闭包)

题型四:求候选键

题型五:分解关系R为BCNF,且具有无损连接性

题型六:分解关系R为3NF,且具有无损连接性和保持函数依赖

分解综合题

1. R(U, F), U = {A, B, C, D}, F = {AB → C, C → D, D → A}


前言

本系列的重点是大学本科课程《数据库系统概念》。总结数据库学习中的各类知识点,并且对各类数据库考试中可能遇到的题型和对应的解法做总结归纳。在自我复习的同时也将这份心得带给大家,希望能对大家的数据库学习提供帮助~~

练习题

题型一:判断关系模式属于第几范式(在BCNF内判断)

题解模板:

  1. 根据候选码快速判断法确定候选码
  2. 从高级范式到低级范式,根据各个范式定义确定(总结性定义,非概念性定义)

BCNF:平凡依赖/左边属性集a是超码

3NF:平凡依赖/左边属性集a是超码/b-a属于候选码

2NF:非主属性完全依赖于候选码

(1) R(U, F), U = {X, Y, Z}, F = {XY → Z}

候选码:XY

根据BCNF定义(平凡依赖或左边a是候选码)。由于XY是候选码,所以是BCNF范式

(2) R(U, F), U = {X, Y, Z}, F = {Y → Z, XZ → Y}

候选码:(XZ)/(XY)

根据3NF定义(平凡依赖或左边a是候选码或b-a属于候选码)。由于Z-Y=Z属于候选码;XZ是候选码,所以是3NF范式

(3) R(U, F), U = {X, Y, Z}, F = {Y → Z, Y → X, X → YZ}

候选码:X、Y

根据BCNF定义(平凡依赖或左边a是候选码)。由于X、Y都是候选码,所以是BCNF范式

(4) R(U, F), U = {X, Y, Z}, F = {X → Y, X → Z}

候选码:X

根据BCNF定义(平凡依赖或左边a是候选码)。由于X是候选码,所以是BCNF范式

(5) R(U, F), U = {W, X, Y, Z}, F = {X → Z, WX → Y}

候选码:XW

BCNF由于X不满足;3NF由于Z不属于候选码不满足;

根据2NF定义(非主属性完全依赖主属性):由于Z是非主属性但是依赖X,是部分依赖主属性。所以仅是1NF

(6) R(U, F), U = {A, B, C, D, E}, F = {AB → CE, E → AB, C → D}

候选码:E、AB(候选码是:超码中任何子集都不能覆盖所有元素的超码

根据2NF定义(非主属性完全依赖主属性):由于C完全依赖AB;D完全依赖于C也就是完全依赖于AB(这里的完全依赖是在F+中满足即可)。所有是2NF

题型二:求最小依赖集(正则覆盖)

算法:

1、合并

2、将依赖右边属性单一化

3、消除左边的无关属性(消除后判断新的函数依赖r是否正确,即r能不能由F导出)

4、合并

5、消除右边的无关属性

例:设有依赖集:F={ABCCABCDACDBDEGBECCGBDCEAG},计算与其等价的最小依赖集。

解:

1、判断左边的属性都不相同,因此不能合并

2、将依赖右边属性单一化:

 F1={ABCCABCDACDBDEDGBECCGBCGDCEACEG }

3、消除F1中左边无关属性:

由于C→A故E是多余的;对于ACDB,由于(CD+=ABCEDG,故A是多余的。删除依赖左部多余的依赖后:

    F2={ABCCABCDCDBDEDGBECCGBCGDCEG }

检查左边没有无关属性

4、合并

F3={ABCCABCDCDBDEGBECCGBDCEG }

5、 消除F3中右边无关属性:

对于CGB,由于(CG+=ABCEDG,故CGB是多余的。删除依赖左部多余的依赖后:

    F4={ABCCABCDCDBDEGBECCGDCEG }

检查右边没有无关属性

6、左右边都没有无关属性,正则覆盖求解结束

题型三:求闭包(求属性闭包)

求属性闭包流程:

1、拿属性集A,逐一放到函数依赖a->b中,如果a∈A则新增b到属性集A中

2、不停重复放到函数依赖中,直到一轮后属性集A不再变化

例:关系模式R(U,F),其中U={A,B,C,D,E,I},F={A→D,AB→E,BI→E,CD→I,E→C},计算(AE)+。

解:

1、A→D扩充AE变为ADE

2、E→C扩充ADE变为ACDE

3、CD→I扩充ACDE变为ACDEI

4、走一轮发现ACDEI不再变化,因此(AE)+=ACDEI

题型四:求候选键

快速求解理论:

对于给定的关系R(A1,A2,…, An)和函数依赖集F,可将其属性分为四类:

L类:仅出现在F的函数依赖左部的属性;

R类:仅出现在F的函数依赖右部的属性;

N类:在F的函数依赖左右两边均未出现的属性;

LR类:在F的函数依赖左右两边均出现的属性。

定理1  对于给定的关系模式R及其函数依赖集F,若X(X属于R)是L类属性,则X必为R的任一候选关键字的成员。

定理对于给定的关系模式R及其函数依赖集F,若XX属于R)是R类属性,则X不在任何候选关键字中。

定理 3 对于给定的关系模式R及其函数依赖集F,若XX属于R)是N类属性,则X必为R的任一候选关键字的成员。


利用快速理论求解步骤:

1、找L类、N类属性加为候选码A

2、求A的闭包看是否全覆盖属性

3、如果覆盖结束;如果不覆盖则继续4

4、找R类属性,将其排除

5、找剩下的属性,逐一加入A中得到A‘,看是否是候选码

   1:关系模式RUF),其中U={ABCD}F={ABCD},试求此关系的候选键。解:根据理论得AC为候选码

   例设有关系模式R(ABCD),其函数依赖集F={DBBDADBACD},求R的所有候选键。解:根据理论得AC,(AC)+=ACDB,因此AC是候选码

题型五:分解关系R为BCNF,且具有无损连接性

BCNF分解不能做到一定保持函数依赖,但是可以保证无损连接

流程:

1、找到result中不符合BCNF的关系模式Ri

2、找到Ri中的非平凡函数依赖a->b,其中a不是超码

3、利用(result-Ri)∪(Ri-b)∪(a,b),将不满足的Ri分解为两个可能满足的关系模式(Ri-b是指在关系模式Ri中去掉和属性b有关的所有函数依赖,但是属性并不去除,同时要重新找新的函数依赖,这个依赖是在闭包里的)

设关系模式R(A,B,C,D,E),FD={A->D, E->D,  D->B,  BC->D,  EC->A}。试求:

(1)R的候选码

(2)R所属的范式

(3)R分解为BCNF,且具有无损连接性

解:

(1)候选码为:CE,非主属性:ABD

(2)判断2NF:A依赖CE;B依赖D依赖A依赖CE;D依赖A依赖CE。因此满足2NF(这个依赖是在闭包中满足

(3)

第一次选择A->D函数依赖:得到R1(ABCE,EC->A,E->B);R2(AD,A->D)

第二次选择E->B函数依赖:得到R1(ACE,EC->A);R2(AD,A->D);R3(BEE->B)

题型六:分解关系R为3NF,且具有无损连接性和保持函数依赖

3NF合成算法流程:

  1. 求出F的正则覆盖Fc
  2. 根据Fc的每个函数依赖分解关系模式R
  3. 判断是否有其中一个R包含候选码
  4. 如果没有则增加一个仅包含候选码的关系模式Ri

TEACHER(教师编号,教师姓名,电话,所在部门,借阅图书编号,书名,借书日期,还书日期,备注)

1)教师编号是候选码吗?说明理由

2)该关系模式的主码是什么?

3)该关系模式是否存在部分函数依赖?如果存在,请写出至少两个?

4)该关系模式满足第几范式?

5)将该关系模式分解为3NF

解:

1)教师编号不是候选码。

(2)假定对任一本书一个人一天只能借一次,则主码为

教师编号,借阅图书编号,借书日期;

非主属性为教师姓名、电话、所在部门、书名、还书日期、备注

(3)存在。

(教师编号,借阅图书编号,借书日期)->教师姓名

(教师编号,借阅图书编号,借书日期)->教师电话

(教师编号,借阅图书编号,借书日期)->所在部门

(教师编号,借阅图书编号,借书日期)->书名

(4)因为存在非主属性对于码的部分函数依赖,所以,未达到二范式,只属于一范式。

(5)

     教师(教师编号,教师姓名,电话,所在部门)

     图书(图书编号,图书名)

     借阅(教师编号,图书编号,借书日期 还书日期,备注)

分解综合题

将给定的关系模式分解成满足BCNF(Boyce-Codd Normal Form)和3NF(Third Normal Form)的关系模式

1. R(U, F), U = {A, B, C, D}, F = {AB → C, C → D, D → A}

候选码:AB、CB、BD

BCNF:

1、选C → D分解得到R1(ABC,AB → C)R2(CD,C → D)

2、选C→A分解得到R1(BC)R2(CD,C → D)R3(AC,C → A)

3NF:

属于3NF不用分解

2. R(U, F), U = {A, B, C, D}, F = {B → C, B → D}

候选码:AB

BCNF:

1、选B → C分解得到R1(ABD,B → D)R2(BC,B → C)

2、选B → D分解得到R1(AB)R2(BC,B → C)R3(BD,B → D)

3NF:

1、Fc={B->CD}

2、R1(BCD,B->CD)R2(AB)

3. R(U, F), U = {A, B, C, D}, F = {AB → C, BC → D, CD → A, AD → B}

候选码:AB、BC、CD、AD

BCNF:

属于BCNF不用分解

3NF:

属于3NF不用分解

 4. R(U, F), U = {A, B, C, D, E}, F = {AB → C, DE → C, B → D}

候选码:ABE

BCNF:

1、选AB → C分解得到R1(ABDE,B → D)R2(ABC,AB → C)

2、选B → D分解得到R1(ABE)R2(BD,B → D)R3(ABC,AB → C)

3NF:

1、Fc=F

2、分解为{(ABE)、(ABC)、(CDE)、(BD)}

5. R(U, F), U = {A, B, C, D, E, F}, F = {A → B, C → DF, AC → E, D → F}

候选码:AC

BCNF:

1、选A → B分解得到R1(ACDEF,C → DF, AC → E, D → F)R2(AB,A → B)

2、选C → DF分解得到R1(ACE,AC → E)R2(AB,A → B)R3(CDF,C → DF,D → F)

3、选D → F分解得到R1(ACE,AC → E)R2(AB,A → B)R3(CD)R4(DF,D → F)

3NF:

1、Fc={A → B, C → D,AC → E, D → F}

2、分解为{(AB)(CD)(ACE)(DF)}

总结 

本文的所有知识点、图片均来自《数据库系统概念》(黑宝书)、山东大学李晖老师PPT。不可用于商业用途转发。

相关推荐

  1. 数据库关系数据结构

    2024-06-19 07:28:06       12 阅读
  2. 关系数据库设计的基本步骤及其产物

    2024-06-19 07:28:06       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-06-19 07:28:06       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-06-19 07:28:06       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-06-19 07:28:06       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-06-19 07:28:06       18 阅读

热门阅读

  1. 【HarmonyOS NEXT 】鸿蒙generateBarcode (码图生成)

    2024-06-19 07:28:06       7 阅读
  2. 界面美观的测试报告

    2024-06-19 07:28:06       5 阅读
  3. JWT详解、JWTUtil工具类的构建方法

    2024-06-19 07:28:06       8 阅读
  4. bashrc和profile区别

    2024-06-19 07:28:06       6 阅读
  5. 下载工程resources目录下的模板excel文件

    2024-06-19 07:28:06       7 阅读
  6. 架构设计 - Nginx Proxy Cache 缓存配置

    2024-06-19 07:28:06       5 阅读
  7. 认识QML

    2024-06-19 07:28:06       5 阅读
  8. CSS 修改鼠标图标样式

    2024-06-19 07:28:06       5 阅读
  9. Linux中常用的压缩与解压文件

    2024-06-19 07:28:06       5 阅读