软件设计师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并不完全正确,如果选项中没有正确答案的话,要选择最接近的答案

相关推荐
圣保罗的大教堂9 天前
1097 Deduplication on a Linked List (25)
pat考试
圣保罗的大教堂12 天前
1089 Insert or Merge (25)
pat考试
圣保罗的大教堂16 天前
1081 Rational Sum (20)
pat考试
圣保罗的大教堂16 天前
1083 List Grades (25)
pat考试
圣保罗的大教堂20 天前
1074 Reversing Linked List (25)
pat考试
圣保罗的大教堂1 个月前
1052 Linked List Sorting (25)
pat考试
圣保罗的大教堂1 个月前
1047 Student List for Course (25)
pat考试
圣保罗的大教堂2 个月前
1028 List Sorting (25)
pat考试
哈哈,柳暗花明2 个月前
软件设计师笔记-数据结构
pat考试
绯樱殇雪2 个月前
编程题 7-29 删除字符串中的子串【PAT】
c++·pat考试