软件设计师27--规范化理论

软件设计师27--规范化理论

考点1:规范化理论基本概念

函数依赖

设R(U)是属性U上的一个关系模式,X和Y是U的子集,r为R的任一关系,如果对于r中的任意两个元组u,v,只要有u[X]=v[X],就有u[Y]=v[Y],则称X函数决定Y,或称Y函数依赖于X,记为X->Y。

关系模式:R(A,B,C)

依赖集1:{AB->C,A->C}

部分函数依赖:A可以确定C,(A,B)也可以确定C。(A,B)中的一部分(即A)可以确定C,称为部分函数依赖。

依赖集2:{A->B,B->C}

传递函数依赖:当A和B不等价时,A可确定B,B可确定C,则A可以确定C,是传递函数依赖

由:A->B,B->C,可得出A->C。此为传递函数依赖

规范化理论--Amstrong公理体系

关系模式R<U,F>来说有以下的推理规则:

A1.自反律(Reflexivity):若Y⊂ X⊂ U,则X→Y成立。

A2.增广律(Augmentation):若Z⊂ U且X→Y,则XZ→YZ成立。

A3.传递律(Transitivity):若X→Y且Y→Z,则X→Z成立。

根据A1,A2,A3这三条推理规则可以得到下面三条推理规则:

合并规则:由X→Y,X→Z,有X→YZ。(A2,A3)

伪传递规则:由X→Y,WY→Z,有XW→Z。(A2,A3)

分解规则:由X→Y及Z⊂ Y,有X→Z。(A1,A3)

候选键

候选键:唯一标识元组,且无冗余,任选一个为主键

外键:其他关系的主键

例1:给定关系R(A1、A2、A3)上的函数依赖集F={A1->A2,A3->A2,A2->A3,A2->A4},R的候选键关键字为(A)。

A、A1

B、A1A3

C、A1A3A4

D、A1A2A3

例2:关系模式P(A、B、C、D、E、F、G、H、I、J)满足下列函数依赖:FD={ABD->E,AB->G,B->F,C->J,CJ->I,G->H},求候选码?。

(ABCD)

例3:关系R(A、B、C)满足下列函数依赖:F={B->C,B->A,A->BC},关系R的候选关键字为(B)。

A、若X→Y,X→Z,则X->YZ为F所蕴涵

B、若X→Y,WY→Z,则XW→Z为F所蕴涵

C、若X->Y,Y->Z为F所蕴涵,则X->Z为F所蕴涵

D、若X->Y为F所蕴涵,且Z∈U,则XZ->YZ为F所蕴涵

主属性与非主属性

定义:组成候选码的属性就是主属性,其他的就是非主属性。

例:关系模式CSZ(CITY,ST,ZIP),其属性组上的函数依赖集为:F={(CITY,ST)->ZIP,ZIP->CITY},其中CITY表示城市,ST表示街道,ZIP表示邮政编码。

候选键为:(ST,CITY),(ST,ZIP)

主属性为:CITY,ST,ZIP

例题:

1、若给定的关系模式为R,U={A,B,C},F={AB->C,C->B},则关系R(B)。

A、有2个候选关键字AC和BC,并且有3个主属性

B、有2个候选关键字AC和AB,并且有3个主属性

C、只有一个候选关键字AC,并且有1个非主属性和2个主属性

D、只有一个候选关键字AB,并且有1个非主属性和2个主属性

2、给定关系模式R(U,F),其中:U为关系模式R中的属性集,F是U上的一组函数依赖。假设U=[A1,A2,A3,A4],F={A1->A2,A1A2->A3,A1->A4,A2->A4},那么关系R的主键应为(A)。函数依赖集F中的(C)是冗余的。

A、A1

B、A1A2

C、A1A3

D、A1A2A3

A、A1->A2

B、A1A2->A3

C、A1->A4

D、A2->A4

3、给定关系模式R<U,F>,其中U为属性集,F是U上的一组函数依赖,那么Armstrong公理系统的伪传递律是指(B)。

A、A1

B、A1A2

C、A1A3

D、A1A2A3

考点2:范式判断

规范化理论

关系模式R(学生姓名,选修课程名,任课教师名,任课教师地址)

学生姓名 选修课程名 任课教师名 任课教师地址
张三 数学 王一新 五一路107号
李四 数学 王一新 五一路107号
王五 数学 王一新 五一路107号
赵六 数学 王一新 五一路107号
...... ...... ...... ......

关系模式R存在问题:

  1. 数据冗余
  2. 修改异常
  3. 插入异常
  4. 删除异常

规范化理论 - 范式

第一范式(1NF):在关系模式R中,当且仅当所有域只包含原子值,即每个属性都是不可再分的数据项,则称关系模式R是第一范式。

思考题:关系模式R(系名称,高级职称人数)是否满足1NF,如果不满足,应如何调整?

|------|----|-----|
| 系名称 | 高级职称人数 ||
| 系名称 | 教授 | 副教授 |
| 计算机系 | 6 | 10 |
| 电子系 | 3 | 5 |

调整为:系名称,教授人数,副教授人数,高级职称总人数

第二范式(2NF):当且仅当关系模式R是第一范式(1NF),且每一个非主属性完全依赖候选键(没有不完全依赖)时,则称关系模式R是第二范式。

思考题:关系模式SC(学号,课程号,成绩,学分),其中:(学号,课程号)->成绩,课程号->学分,会存在那些问题(从数据冗余、更新异常、插入异常、删除异常这几个方面来考虑),解决方案是什么?

解析:

  1. 找候选键(学号,课程号)
  2. 找非主属性(成绩,学分)

调整为:(课程,学分)、(学号,课程号,成绩)

第三范式(3NF):当且仅当关系模式R是第二范式(2NF),且R中没有非主属性传递依赖于候选键时,则称关系模式R是第三范式。

思考题:学生关系(学号,姓名,系号,系名,系位置)各属性分别代表学号,姓名,所在系号,系名称,系地址。思考该关系模式会存在哪些问题(从数据冗余、更新异常、插入异常、删除异常这几个方面来考虑),解决方案是什么?

解析:

  1. 找候选键(学号)
  2. 找非主属性
  3. 2NF
  4. 3NF

调整为:(系号,系名,系位置)、(学号,姓名,学号)

BC范式(BCNF):设R是一个关系模式,F是它的依赖集,R属于BCNF当且仅当其F中每个依赖的决定因素必定包含R的某个候选码。

例:关系模式STJ(S,T,J)中,S表示学生,T表示老师,J表示课程。每一老师只教一门课程。每门课程有若干老师,某一学生选定某门课程,就对应一个固定老师。

T->J

SJ->T

  1. 候选键 SJ,ST
  2. 非主属性 没有
  3. 2NF 满足
  4. 3NF 满足

1NF ⊇ 2NF ⊇ 3NF ⊇ BCNF

范式 属性不可再分 非主属性部分函数依赖于候选键 非主属性传递函数依赖于候选键 函数依赖左侧决定因素包含候选键
1NF 存在
2NF 不存在 存在
3NF 不存在 不存在 不满足
BCNF 不存在 不存在 满足

例题:

1、某公司数据库中的元件关系模式为P(元件号,元件名称,供应商,供应商所在地,库存量),函数依赖集F如下所示:F={元件号→元件名称,(元件号,供应商)→库存量,供应商→供应商所在地}

元件关系的主键为(B),该关系存在冗余以及插入异常和删除异常等问题。为了解决这一问题需要将元件关系分解(C),分解后的关系模式可以达到(C)。

A、元件号,元件名称

B、元件号,供应商

C、元件号,供应商所在地

D、供应商,供应商所在地

A、元件1(元件号,元件名称,库存量)、元件2(供应商,供应商所在地)

B、元件1(元件号,元件名称)、元件2(供应商,供应商所在地,库存量)

C、元件1(元件号,元件名称)、元件2(元件号,供应商,库存量)、元件3(供

应商,供应商所在地)

D、 元件1(元件号,元件名称)、元件2(元件号,库存量)、元件3(供应商,供应商所在地)、元件4(供应商所在地,库存量)

A、1NF

B、2NF

C、3NF

D、4NF

考点3:范式分解

保持函数依赖分解

设数据库模式ρ={R1,R2,...,Rk}是关系模式R的一个分解,F是R上的函数依赖集,ρ中每个模式Ri上的FD集是Fi。如果{F1,F2,...,Fk}与F是等价的(即相互逻辑蕴涵),那么称分解ρ保持FD。

例:设关系模式R(U,F),其中U={A,B,C,D,E},F={A->BC,C->D,BC->E,E->A},则分解ρ={R1(ABCE),R2(CD)}是否保持函数依赖?而分解ρ={R1(ABE),R2(CD)}是否保持函数依赖?

R1(ABCE) F~1~={A->BC,BC->E,E->A}

R2(CD) F~2~={C->D}

分解ρ={R1(ABCE),R2(CD)}保持函数依赖

分解ρ={R1(ABE),R2(CD)}不保持函数依赖

例:设关系模式R(U,F),其中U={A,B,C},F={A->B,B->C,A->C},则分解ρ={R1(AB),R2(BC)},是否保持函数依赖?

R1(AB)F~1~={A->B}

R2(BC)F~2~={B->C}

F^'^={A->B,B->C => A->C}

解ρ={R1(AB),R2(BC)},保持函数依赖

无损分解

什么是有损,什么又是无损?

有损:不能还原

无损:可以还原

无损连接分解:指将一个关系模式分解成若干各关系模式后,通过自然连接等运算仍能还原到原来的关系模式

思考题:

有关系模式:成绩(学号,姓名,课程号,课程名,分数)

函数依赖:学号->姓名,课程号->课程名,(学号,课程号)->分数

若将其分解为:

成绩(学号,课程号,分数)

学生(学号,姓名)

课程(课程号,课程名)

请思考该分解是否为无损分解?

由于有:学号->姓名,所以:

成绩(学号,课程号,分数,姓名)

由于有:课程号->课程名,所以:

成绩(学号,课程号,分数,姓名,课程名)

模式分解-表格法

将一个具有函数依赖:学号->姓名,课程号->课程名,(学号,课程号)->分数的关系模式:成绩(学号,姓名,课程号,课程名,分数),分解为:成绩(学号,课程号,分数);学生(学号,姓名);课程(课程号,课程名)。

初始表如下:

根据学号->姓名,对上表进行处理,将第一行第二行属性改成符号√ ̄;然后考虑课程号->课程名,将第一行第四行属性改成符号√ ̄,得下表:

从上图中可以看出,第一行已全部为√ ̄,因此本次R分解是无损连接分解。

例:设R=ABC,F={A->B},则分解ρ~1~={R~1~(AB),R~2~(AC)}与分解ρ~2~={R~1~(AB),R~3~(BC)}是否都为无损分解?

A B C
R~1~(AB) ×
R~2~(AC) ×

分解ρ~1~={R~1~(AB),R~2~(AC)}保持函数依赖,并且无损分解

A B C
R~1~(AB) ×
R~3~(BC) ×

分解ρ~2~={R~1~(AB),R~3~(BC)}保持函数依赖,有损分解

无损分解 - 公式法

定理:如果R的分解为ρ={R~1~,R~2~},F为R所满足的函数依赖集合,分解ρ具有无损连接性的充分必要条件是:

R~1~∩R~2~->(R~1~-R~2~)或 R~1~∩R~2~->(R~2~-R~1~)

其中,R~1~∩R~2~表示模式的交,为R~1~与R~2~中公共属性组成,R~1~-R~2~或R~2~-R~1~表示模式的差集,R~1~-R~2~表示R~1~中去除R~1~和R~2~的公共属性所组成。当模式R分解成两个关系模式R~1~和R~2~时,如果R~1~与R~2~的公共属性能函数决定R~1~中或R~2~中的其他属性,这样的分解就具有无损连接性。

例:设R=ABC,F={A->B},则分解ρ~1~={R~1~(AB),R~2~(AC)}与分解ρ~2~={R~1~(AB),R~3~(BC)}是否都为无损分解?

R~1~∩R~2~=A

R~1~-R~2~=B

R~2~-R~1~=C

ρ~1~={R~1~(AB),R~2~(AC)}为无损分解

R~1~∩R~3~=B

R~1~-R~3~=A

R~3~-R~1~=C

ρ~2~={R~1~(AB),R~3~(BC)}为有损分解

例题:

1、设关系模式R(U,F),其中:U={A,B,C,D,E},F={A->B,DE->B,CB->E,E->A,B->D}。(D)为关系模式R的候选关键字。分解(D)是无损连接,并保持函数依赖的。

A、AB

B、DE

C、DB

D、CE

A、ρ={R~1~(AC),R~2~(ED),R~3~(B)}

B、ρ={R~1~(AC),R~2~(E),R~3~(DB)}

C、ρ={R~1~(AC),R~2~(ED),R~3~(AB)}

D、ρ={R~1~(ABC),R~2~(ED),R~3~(ACE)}

A选项表格法为:

A B C D E
R~1~(AC) × × ×
R~2~(ED) × × ×
R~3~(B) × × × ×

C选项表格法为:

A B C D E
R~1~(AC) × × ×
R~2~(ED) × × ×
R~3~(AB) × × ×

D选项表格法为:

A B C D E
R~1~(ABC) × ×
R~2~(ED) × × ×
R~3~(ACE) × ×

选项A不保持函数依赖,有损

选项B不保持函数依赖,有损

选项C不保持函数依赖,有损

选项D不保持函数依赖,无损

注:选项D并不完全正确,如果选项中没有正确答案的话,要选择最接近的答案

相关推荐
绯樱殇雪6 天前
编程题 7-14 求整数段和【PAT】
c++·pat考试
C盘清理14 天前
2025考研倒计时 考研时间公布了 你准备好复习冲刺了吗?
考研·倒计时·pat考试·高考·倒计时软件·日期倒计时
绯樱殇雪18 天前
函数题 6-8 简单阶乘计算【PAT】
c·pat考试
Moliay3 个月前
1117 数字之王
c语言·c++·算法·pat考试·简单模拟
zhang98800004 个月前
2024-2025最新软考系统架构设计师的复习资料教材,解决如何快速高效通过该考试,试题的重点和难点在哪里?案例分析题和论文题的要点和踩坑点分析
考研·面试·职场和发展·系统架构·运维开发·pat考试·学习方法
Moliay4 个月前
1052 卖个萌(测试点1,2)
笔记·算法·pat考试·简单模拟
Moliay4 个月前
1123 舍入(测试点2,6,7,8)
c语言·c++·算法·c·pat考试
Y_3_74 个月前
【分治算法 7】翻转对(hard)(每日一题)
java·程序人生·算法·leetcode·蓝桥杯·排序算法·pat考试
小王不会写code5 个月前
数据结构判断题(期末模拟)
数据结构·算法·pat考试·期末考试
Moliay5 个月前
1066 图像过滤
c++·算法·pat考试·简单模拟