数据库2复习资料11春季.docx

上传人:b****4 文档编号:24362144 上传时间:2023-05-26 格式:DOCX 页数:15 大小:120.35KB
下载 相关 举报
数据库2复习资料11春季.docx_第1页
第1页 / 共15页
数据库2复习资料11春季.docx_第2页
第2页 / 共15页
数据库2复习资料11春季.docx_第3页
第3页 / 共15页
数据库2复习资料11春季.docx_第4页
第4页 / 共15页
数据库2复习资料11春季.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

数据库2复习资料11春季.docx

《数据库2复习资料11春季.docx》由会员分享,可在线阅读,更多相关《数据库2复习资料11春季.docx(15页珍藏版)》请在冰豆网上搜索。

数据库2复习资料11春季.docx

数据库2复习资料11春季

数据库

(2)复习资料------------------上大11春季

例1设关系模式R(U,F),其中,

U={A,B,C,D,E,I},F={A→D,AB→C,BI→C,ED→I,C→E},求(AC)+。

例2设有函数依赖集F={A→C,C→A,B→AC,D→AC,BD→A},计算它等价的最小依赖集Fmin。

例3设关系模式R(U,F)中,U={A,B,C,D,E},F={AB→C,C→D,D→E},R的一个分解ρ={R1(A,B,C),R2(C,D),R3(D,E)}。

试判断ρ具有无损连接性。

设关系模式R(ABCD),如果规定,关系中B值与D值之间是一对多联系,A值与C值之间是一对一联系。

试写出相应的函数依赖。

设关系模式R(ABCD),F是R上成立的FD集,F={A→B,C→B},则相对于F,试写出关系模式R的关键码。

并说明理由。

*

设关系模式R(ABCD),F是R上成立的FD集,

F={A→B,B→C},

①   试写出属性集BD的闭包(BD)+。

②  试写出所有左部是B的函数依赖(即形为“B→”)。

设关系模式R(ABC),F是R上成立的FD集,

F={A→C,B→C},试分别求F在模式AB和AC上的投影。

设有一个记录各个球队队员每场比赛进球数的关系模式

R(队员编号,比赛场次,进球数,球队名,队长名)

如果规定每个队员只能属于一个球队,每个球队只有一个队长。

①   试写出关系模式R的基本FD和关键码。

②   说明R不是2NF模式的理由,并把R分解成2NF模式集。

③   进而把R分解成3NF模式集,并说明理由。

*多值依赖,BCNF

*数据库系统生存期;概念设计的目标,独立于…,步骤;采用ER方法的数据库概念设计分三步;

设关系模式R(ABC)上有一个MVDAB,如果已知R的当前关系存在三个元组(ab1c1),(ab2c2),(ab3c3),那么这个关系中至少还应该存在那些元组

*逻辑设计的目的;与软硬件关系;

}

*事务的定义;事务开始,结束语句

*事务的ACID性质;

*恢复的定义;恢复的基本原则;实现方法;

*故障类型;

*检查点机制;REDO操作;UNDO操作;运行记录优先原则;数据库的并发操作带来的问题;解决并发操作带来的问题有两种技术;封锁技术有两种封锁;使用封锁技术可能带来的三个问题;

*事务的调度;串行调度和并行调度;两段封锁协议;

*数据库中的完整性指,完整性子系统的主要功能;完整性规则的组成;

设教学数据库的关系如下:

S(SNO,SNAME,AGE,SEX)

SC(SNO,CNO,GRADE)

C(CNO,CNAME,TEACHER)

试用多种方法定义下列完整性约束:

⑴在关系S中插入的学生年龄值应在16~25岁之间。

⑵在关系SC中插入元组时,其SNO值和CNO值必须分别在S和C中出现。

⑶在关系C中删除一个元组时,首先要把关系SC中具有同样CNO值的元组全部删去。

⑷在关系S中把某个SNO值修改为新值时,必须同时把关系SC中那些同样的SNO值也修改为新值。

{

在教学数据库中的关系S、SC、C中,试用SQL的断言机制定义下列两个完整性约束:

⑴每位教师开设的课程不能超过10门。

(2)不允许男同学选修WU老师的课程。

(3)每门课程最多50名男同学选修

(4)学生必须在选修Maths课后,才能选修其他课程。

(5)每个男学生最多选修20门课程。

*创建触发器:

1>在学生表S上定义更新触发器,使其阻止SNO列被修改:

2>在学习表SC上定义更新触发器,使其修改后的成绩不能低于原来的成绩:

3>为学习表SC设计“选课”和“退课”触发器来实现“按学分计算学费”的业务管理逻辑:

CREATEASSERTIONASSE3CHECK

(50>=ALL(SELECTCOUNT

FROMS,SC

WHERE=

ANDSEX=’男’

GROUPBYCNO));

(4)学生必须在选修Maths课后,才能选修其他课程。

这个约束可用下列形式表达:

“不存在一个学生的选课,这个学生没学过Maths课”。

CREATEASSERTIONASSE4CHECK

(NOTEXISTS(SELECT*

FROMSCX

WHERENOTEXISTS

(SELECT*

FROMSCY,C

WHERE=

AND=

ANDCNAME=’Maths’)));

(5)每个男学生最多选修20门课程。

CREATEASSERTIONASSE5CHECK

(20>=ALL(SELECTCOUNT(CNO)

FROMS,SC

WHERE=

ANDSEX=’男’

GROUPBY);

*创建触发器:

1>在学生表S上定义更新触发器,使其阻止SNO列被修改:

CREATETRIGGERSNO_UPDONS

FORUPDATE

AS

IFUPDATE(SNO)

ROLLBACKTRANSACTION

RETURN

2>在学习表SC上定义更新触发器,使其修改后的成绩不能低于原来的成绩:

CREATETRIGGERSC_UPDATE_GRADEONSC

FORUPDATE

AS

DECLARE@OLD_GRADEREAL

@NEW_GRADEREAL

IFUPDATE(GRADE)

BEGIN

SELECT@OLD_GRADE=GRADE

FROMDELETED

SELECT@NEW_GRADE=GRADE

FROMINSERTED

IF@OLD_GRADE>@NEW_GRADE

ROLLBACKTRANSACTION

END

3>为学习表SC设计“选课”和“退课”触发器来实现“按学分计算学费”的业务管理逻辑:

//选课

CREATETRIGGERSC_INS_UPDATE_SONSC

AFTERINSERT

AS

DECLARE@PRICEINT

/

SET@PRICE=20

IFUPDATE(SNO)

UPDATES

SETFEES=FEES+@PRICE*(SELECTCREDIT

FROMC

WHERE=(SELECTCNO

FROMINSERTED))

WHERESNO=(SELECTSNO

{

FROMINSERTED);

RETURN

//退课

CREATETRIGGERSC_DEL_UPDATE_SONSC

AFTERDELETE

AS

DECLARE@PRICE

SET@PRICE=20

|

IFUPDATE(SNO)

UPDATES

SETFEES=FEES-@PRICE*(SELECTCREDIT

FROMC

WHERE=(SELECTCNO

FROMDELETED))

WHERESNO=(SELECTSNO

FROMDELETED);

·

RETURN

*用SQL3触发器

1>创建供应关系SPJ的一个触发器,在修改关系SPJ的PRICE值时,只能增加不能减少,否则拒绝修改:

CREATETRIGGERTRIG1

AFTERUPDATEOFPRICEONSPJ

REFERENCING

OLDASOLDTUPLE

NEWASNEWTUPLE

WHEN>

UPDATESPJ

SETPRICE=

WHERESNO=ANDPNO=

ANDJNO=

FOREACHROW;

*SQL中的安全性机制:

视图机制,授权子系统

例:

设有三个关系模式:

EMP(ENO,ENAME,AGE,SEX,ECITY)

COMP(CNO,CNAME,CITY)

WORKS(ENO,CNO,SALARY)

试用SQL的断言机制定义下列完整性约束:

①每个职工至多可在3个公司兼职工作:

CREATEASSERTIONASSE1CHECK

(3>=ALL(SELECTCOUNT(CNO)

FROMWORK

GROUPBYENO));

②每门公司男职工的平均年龄不超过40岁:

CREATEASSERTIONASSE2CHECK

(40>=ALL(SELECTAVG)

FROMEMP,WORK

WHERE=

ANDSEX=’男’

GROUPBYCNO));

~

③不允许女职工在建筑公司工作:

CREATEASSERTIONASSE3CHECK

(NOTEXISTS(SELECT*

FROMWORK

WHERECNOIN(SELECTCNO

FROMCOMP

WHERECNAME=‘建筑公司’)

ANDENOIN(SELECTENO

|

FROMEMP

WHERESEX=‘女’)));

*用SQL3触发器

【实例1】某单位修改工资原则:

如果职工工资修改后仍低于900元,那么,在修改后的工资基础上再增加原工资的5%,但不得超过900元(元组级触发器)。

CREATETRIGGERTRI_UPD_SALARY/*触发器命名*/

AFTERUPDATEOFSALARYONWORK/*触发时间,触发事件,目标表*/

REFERENCING/*设置必要的变量*/

OLDASOLDTUPLE/*为元组级触发器设置变量*/

·

NEWASNEWTUPLE

FOREACHROW/*触发器的动作时间间隔*/

WHEN(900>)/*触发器的动作条件部分*/

BEGINATOMIC

UPDATEWORK/*触发器的动作部分1*/

SETSALARY=+*

WHEREENO=

AND(900>+*;

UPDATEWORK/*触发器的动作部分2*/

SETSALARY=900

WHEREENO=

AND(900<=+*;

END;

【实例2】在学习关系SC表中修改课程号CNO,即学生的选课登记需作变化。

在关系SC中的约束:

要求保持每门课程选修人数不超过50。

如果更改课程号后,违反这个约束,那么这个更改应该不做。

(语句级触发器)

CREATETRIGGERTRI_UPD_SC/*触发器的命名*/

INSTEADOFUPDATEOFCNOONSC/*时间、事件、目标*/

:

REFERENCING/*设置变量*/

OLD_TABLEASOLDSTUFF/*为语句级触发器设置变量*/

NEW_TABLEASNEWSTUFF

WHEN(50>=ALL(SELECTCOUNT(SNO)/*动作时间条件*/

FROM((SCEXCEPTOLDSTUFF)UNIONNEWSTUFF)

GROUPBYCNO)))

BEGINATOMIC/*动作体*/

DELETEFROMSC/*触发动作1*/

[

WHERE(SNO,CNO,GRADE)INOLDSTUFF;

INSERTINTOSC/*触发动作2*/

SELECT*FROMNEWSTUFF

END;

例1:

把对关系S的查询、修改权限授给用户WANG,并且WANG

还可以把这些权限转授给其他用户:

GRANTSELECT,UPDATEONSTOWANG

WITHGRANTOPTION

&

例2:

允许用户BAO建立新关系,并可以引用关系C的主键CNO作为新

关系的外键,并有转让权限。

GRANTREFERENCES(CNO)ONCTOBAO

WITHGRANTOPTION

例3:

从用户WANG连锁回收对关系S的查询、修改权限。

REVOKESELECT,UPDATEONSFROMWANGCASCADE

*DDBS特点:

物理独立性,逻辑整体性,场地自治性,场地之间协作性,数据独立性(数据的逻辑独立性和数据的物理独立性),适当增加数据冗余度;

*DDBS的分类:

同构同质,同构异质,异构型

*DDB6层模式结构:

全局外部级,全局概念级,分片级,分配级,局部概念级,局部内部级

*映像体现的数据独立性:

逻辑数据独立性,分布透明性,位置透明性,局部数据模型透明性,物理数据独立性;

图是有关教师(Faculty)、系(Department)和系主任(Director)信息的对象联系图。

(1)试用ORDB的定义语言,定义这个数据库。

(2)试用ORDB的查询语言,分别写出下列查询的SELECT语句:

①检索精通俄语(Russian)的教师工号和姓名。

②检索复旦大学出访过瑞士(Switzerland)并且精通日语

(Japanese)的系主任。

[

解:

(1)试用ORDB的定义语言,定义这个数据库:

CREATETYPEMyStringcharvarying;

CREATETABLEdepartment(universityMyString,dnameMyString,

staffsetof(ref(faculty)),direref(director));

CREATETABLEfaculty(fnointeger,fnameMyString,languagessetof(MyString),

countriessetof(MyString),works_forref(department));

CREATETABLEdirector(dnointeger)Underfaculty;

\

(2)试用ORDB的查询语言,分别写出下列查询的SELECT语句:

①检索精通俄语(Russian)的教师工号和姓名。

SELECTfno,fname

FROMfaculty

WHERE‘Russian’inlanguages;

②检索复旦大学出访过瑞士(Switzerland)并且精通日语

(Japanese)的系主任。

SELECT,

FROMdirectorasD

WHEREUniversity’

AND‘Switzerland’in

AND‘Japanese’in;

解:

(1)试解释这个对象联系图:

*对象student包含:

身份证号、姓名、籍贯和学习(studies)等属性;

*对象study包含:

课程名、成绩、求学地、大学以及学生(student)等属性。

*对象student和study之间的联系为1:

N

(2)试用ORDB的定义语言,定义这个数据库

CREATETYPEMyStringcharvarying;

CREATETABLEstudent(snointeger,

snameMyString,

cityMyString,

studiessetof(ref(study)));

CREATETABLEstudy(coursenameMyString,

gradeinteger,

cityMyString,

universityMyString,

studentref(student));

(3)试用ORDB的查询语言,分别写出下列查询:

①检索每个学生的学习课程和成绩。

SELECT,,

FROMstudentasA,asB;

②检索至少有一门课程的求学地与籍贯在同一城市的

学生学号和姓名。

SELECT,

FROMstudentasA,asB

WHERE=;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 家庭教育

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1