您的当前位置:首页正文

数据库(2)复习资料(11春季)

2020-07-06 来源:星星旅游
数据库(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)上有一个MVD A B,如果已知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设计“选课”和“退课”触发器来实现“按学分计算学费”的业务管理逻辑:

CREATE ASSERTION CHECK

(50>=ALL(SELECT COUNT

FROM S, SC

WHERE =

AND SEX=’ 男’

GROUP BY CNO));

ASSE3

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

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

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

CREATE ASSERTION ASSE4 CHECK

(NOT EXISTS( SELECT *

FROM SC X

WHERE NOT EXISTS

(SELECT *

FROM SC Y, C

WHERE =

AND =

AND CNAME=’ Maths’)));

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

CREATE ASSERTION ASSE5 CHECK

(20>=ALL(SELECT COUNT(CNO)

FROM S, SC

WHERE =

AND SEX=’ 男’

GROUP BY );

*创建触发器:

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

CREATE TRIGGER SNO_UPD ON S

FOR UPDATE

AS

)

IF UPDATE(SNO)

ROLLBACK TRANSACTION

RETURN

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

CREATE TRIGGER SC_UPDATE_GRADE ON SC

FOR UPDATE

AS

DECLARE @OLD_GRADE REAL

,

@NEW_GRADE REAL

IF UPDATE(GRADE)

BEGIN

SELECT @OLD_GRADE =GRADE

FROM DELETED

SELECT @NEW_GRADE =GRADE

FROM INSERTED

IF @OLD_GRADE>@NEW_GRADE

ROLLBACK TRANSACTION

END

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

//选课

CREATE TRIGGER SC_INS_UPDATE_S ON SC

AFTER INSERT

AS

DECLARE @PRICE INT

/

SET @PRICE=20

IF UPDATE(SNO)

UPDATE S

SET FEES=FEES+@PRICE*(SELECT CREDIT

FROM C

WHERE =(SELECT CNO

FROM INSERTED))

WHERE SNO=(SELECT SNO

{

FROM INSERTED);

RETURN

//退课

CREATE TRIGGER SC_DEL_UPDATE_S ON SC

AFTER DELETE

AS

DECLARE @PRICE

SET @PRICE=20

|

IF UPDATE(SNO)

UPDATE S

SET FEES=FEES-@PRICE*(SELECT CREDIT

FROM C

WHERE =(SELECT CNO

FROM DELETED))

WHERE SNO=(SELECT SNO

FROM DELETED);

·

RETURN

*用SQL3触发器

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

CREATE TRIGGER TRIG1

AFTER UPDATE OF PRICE ON SPJ

REFERENCING

OLD AS OLDTUPLE

NEW AS NEWTUPLE

WHEN >

UPDATE SPJ

SET PRICE=

WHERE SNO= AND PNO=

AND JNO=

FOR EACH ROW;

*SQL中的安全性机制:视图机制,授权子系统

例:设有三个关系模式:

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

COMP(CNO,CNAME,CITY)

WORKS(ENO,CNO,SALARY)

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

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

CREATE ASSERTION ASSE1 CHECK

( 3 >= ALL (SELECT COUNT(CNO)

FROM WORK

GROUP BY ENO ));

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

CREATE ASSERTION ASSE2 CHECK

(40 >= ALL(SELECT AVG)

FROM EMP,WORK

WHERE =

AND SEX=’男’

GROUP BY CNO));

~

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

CREATE ASSERTION ASSE3 CHECK

( NOT EXISTS (SELECT *

FROM WORK

WHERE CNO IN(SELECT CNO

FROM COMP

WHERE CNAME =‘建筑公司’)

AND ENO IN(SELECT ENO

|

FROM EMP

WHERE SEX=‘女’)));

*用SQL3触发器

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

CREATE TRIGGER TRI_UPD_SALARY /*触发器命名*/

AFTER UPDATE OF SALARY ON WORK /*触发时间,触发事件,目标表*/

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

OLD AS OLDTUPLE /*为元组级触发器设置变量*/

·

NEW AS NEWTUPLE

FOR EACH ROW /*触发器的动作时间间隔*/

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

BEGIN ATOMIC

UPDATE WORK /*触发器的动作部分1*/

SET SALARY=+*

WHERE ENO=

AND (900>+*;

UPDATE WORK /*触发器的动作部分2*/

SET SALARY=900

WHERE ENO=

AND (900<=+*;

END;

【实例2】在学习关系SC表中修改课程号CNO,即学生的选课登记需作变化。在关系SC中的约束:要求保持每门课程选修人数不超过50。如果更改课程号后,违反这个约束,那么这个更改应该不做。(语句级触发器)

CREATE TRIGGER TRI_UPD_SC /*触发器的命名*/

INSTEAD OF UPDATE OF CNO ON SC /*时间、事件、目标*/

:

REFERENCING /*设置变量*/

OLD_TABLE AS OLDSTUFF /*为语句级触发器设置变量*/

NEW_TABLE AS NEWSTUFF

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

FROM ((SC EXCEPT OLDSTUFF) UNION NEWSTUFF)

GROUP BY CNO)))

BEGIN ATOMIC /*动作体*/

DELETE FROM SC /*触发动作1*/

[

WHERE (SNO,CNO,GRADE) IN OLDSTUFF;

INSERT INTO SC /*触发动作2*/

SELECT * FROM NEWSTUFF

END;

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

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

GRANT SELECT,UPDATE ON S TO WANG

WITH GRANT OPTION

&

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

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

GRANT REFERENCES (CNO) ON C TO BAO

WITH GRANT OPTION

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

REVOKE SELECT,UPDATE ON S FROM WANG CASCADE

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

*DDBS的分类:同构同质,同构异质,异构型

*DDB 6层模式结构:全局外部级,全局概念级,分片级,分配级,局部概念级,局部内部级

*映像体现的数据独立性:逻辑数据独立性,分布透明性,位置透明性,局部数据模型透明性,物理数据独立性;

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

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

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

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

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

(Japanese)的系主任。

[

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

CREATE TYPE MyString char varying;

CREATE TABLE department(university MyString,dname MyString,

staff setof(ref(faculty)),dire ref(director));

CREATE TABLE faculty(fno integer,fname MyString, languages

setof(MyString),

countries ref(department));

setof(MyString),works_for

CREATE TABLE director(dno integer) Under faculty;

\\

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

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

SELECT fno, fname

FROM faculty

WHERE ‘Russian’ in languages;

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

(Japanese)的系主任。

SELECT ,

FROM director as D

WHERE University’

AND ‘Switzerland’ in

AND ‘Japanese’ in ;

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

* 对象student包含:

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

* 对象study包含:

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

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

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

CREATE TYPE MyString char varying;

CREATE TABLE student(sno integer,

sname MyString,

city MyString,

studies setof(ref(study)));

CREATE TABLE study(coursename MyString,

grade integer,

city MyString,

university MyString,

student ref(student));

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

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

SELECT , ,

FROM student as A, as B;

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

学生学号和姓名。

SELECT ,

FROM student WHERE =;

as A, as B

因篇幅问题不能全部显示,请点此查看更多更全内容