(完整word版)模式分解例题

相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

模式分解例题

设有关系模式R(U, F), 其中 U={A ,B ,C ,D ,E },F = {AB →C ,B →D ,D →E ,C →B },

试问R 最高为第几范式,并解释原因?如果R 不是 3NF 或 BCNF ,要求将其分解为 3NF 和

BCNF

关系R 中的函数依赖如下图表示

• R :

A ,

B →

C ;

B →D ;

D →

E ;

C →B

第一范式规定关系的每一个分量必须是一个不可分的数据项。可以看出,该关系满足第一

范式。

如果关系模式R 满足第一范式,且它的任何一个非主属性都完全函数依赖于任一个候选

码,则R 满足第二范式(简记为2NF )。所以不是第二范式

分解成第二范式

R1 :

A ,

B →

C ;

C →B

R2:

B →D ;

D →

E ;

如果关系模式R 满足 2NF ,并且它的任何一个非主属性都不传递依赖于任何候选码,则

称R 是第三范式 (3NF), 记作R ∈3NF 。

分解成第三范式

R1 :

A ,

B →

C ;

C →B

R21:

B →D

R22:

D →E

• 如果关系模式R 是1NF ,且每个属性都不传递依赖于R 的候选码,那么称R

是BCNF 的模式。

A

B

C D E

R1 :

A,B →C;

C →B

R21:

B →D

R22:

D →E

R1中属性B传递依赖于R的候选码AB,故R1不是BCNF范式

关系模式R∈1NF,若X→Y,且Y⊆X 时,X必含有候选码,则R∈BCNF。

R1中C→ B,且B⊆C ,但B不含有任何候选码,故R1不是BCNF范式

分解成BCNF范式

R11 :

A,B

R12 :

C →B

R21:

B →D

R22:

D →E

候选码是什么?

能够唯一标识一个元组的某一属性或属性组。

候选码:(A,B)和(A,C)

假设有一个名为参加的关系,该关系有属性:职工(职工名)、工程(工程名)、时数(花费在工程上的小时数)和工资(职工的工资);一个参加记录描述一个职工花费在一个工程上的总时数和他的工资;另外,一个职工可以参加多个工程,多个职工可以参加同一个工程(用

A、B、C、D分别代表属性职工、工程、时数和工资)。请回答如下各问题:

1) 确定这个关系的关键字;AB

2) 找出这个关系中的所有函数依赖;AB->C , A->D

3) 指出这个关系上的哪些函数依赖会带来操作异常现象;

D对关键字AB的部分函数依赖可能会带来如下问题:

数据冗余:一个职工参加多个工程,则职工的工资值会重复;

更新异常:当改变职工的工资时,可能会只修改了一部分,从而造成数据不一致;

插入异常:当一个职工尚未承担工程,但要插入职工信息(如工资)则不允许(因为没有完整的关键字);

删除异常:当某个工程结束,删除工程信息时,可能会将职工信息(如工资)一同删除(如果职工只参加了一项工程)。

4) 这个关系是第几范式关系?2NF

5) 计算该关系上函数依赖集的最小覆盖;Fm={AB->C, A->D}

6) 将该关系分解成尽可能高的范式,并指明是第几范式?

分解为R1(A,B,C)和R2(A,D)结果为4NF

对于学生选课关系,其关系模式为:

学生(学号,姓名,年龄,所在系);

课程(课程名,课程号,先行课);

选课(学号,课程号成绩)。

用关系代数完成如下查询。

1)求学过数据库课程的学生的姓名和学号。

2)求学过数据库和数据结构的学生姓名和学号。

3)求没学过数据库课程的学生学号。

4)求学过数据库的先行课的学生学号。

程序设计题现有关系数据库如下:

学生(学号,姓名,性别,专业、奖学金)

课程(课程号,名称,学分)

学习(学号,课程号,分数)

用关系代数表达式实现下列1—4小题;用SQL语言实现下列5—8小题。

1.检索“国际贸易”专业中获得奖学金的学生信息,包括学号、姓名、课程名和分数;

2.检索学生成绩得过满分(100分)的课程的课程号、名称和学分;

3.检索没有获得奖学金、同时至少有一门课程成绩在95分以上的学生信息,包括学号、姓名和专业;

4.检索没有任何一门课程成绩在80分以下的学生的信息,包括学号、姓名和专业;

5.检索没有获得奖学金、同时至少有一门课程成绩在95分以上的学生信息,包括学号、姓名和专业;

6.检索没有任何一门课程成绩在80分以下的所有学生的信息,包括学号、姓名和专业;

7.对成绩得过满分(100分)的学生,如果没有获得奖学金的,将其奖学金设为1000元;

8.定义学生成绩得过满分(100分)的课程视图AAA,包括课程号、名称和学分;

1.Π学号,姓名,课程名,分数(σ奖学金>0∧专业=国际贸易(学生∞学习∞课程))

2.Π课程号,名称,学分(σ分数=100(学习∞课程))

3.Π学号,姓名,专业(σ奖学金<=0∧分数>95(学生∞学习))

4.Π学号,姓名,专业(学生)—Π学号,姓名,专业(σ分数<80(学生∞学习))

5.SELECT 学生.学号,姓名,专业

FROM 学生,学习

WHERE 学生.学号=学习.学号

AND 学习.课程号=课程.课程号

AND 奖学金<=0 AND 分数>95

6.SELECT 学号,姓名,专业

FROM 学生

WHERE 学号NOT IN

(SELECT 学号

FROM 学习

WHERE 分数<80)

7.UPDATE 学生

SET 奖学金=1000

WHERE 奖学金<=0 AND 学号IN

(SELECT 学号

FROM 学习

相关文档
最新文档