欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 运维知识 > 数据库 >内容正文

数据库

【数据库题型大总结】应用题总结

发布时间:2025/3/15 数据库 44 豆豆
生活随笔 收集整理的这篇文章主要介绍了 【数据库题型大总结】应用题总结 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

文章目录

  • 一:考察关系代数表达式
    • (1)说明
    • (2)典型例题
  • 二:考察SQL语言
    • (1)说明
    • (2)典型例题
  • 三:查询树及其优化
    • (1)说明
    • (2)典型例题
  • 四:E-R模型转关系模型
    • (1)说明
    • (2)典型例题
  • 五:有关范式
    • (1)说明
    • (2)典型例题
  • 六:关于数据库恢复
    • (1)说明
    • (2)典型例题
  • 七:闭包
    • (1)说明
    • (2)典型例题
  • 八:求解候选码
    • (1)说明
    • (2)典型例题
  • 九:有关锁的问题
    • (1)说明
    • (2)典型例题

一:考察关系代数表达式

(1)说明

  • 先看投影放在外
  • 再看选择放在内

注意符号

(2)典型例题

现有关系数据库如下:
学生(学号,姓名,性别,专业、奖学金)
课程(课程号,名称,学分)
学习(学号,课程号,分数)
1.检索“国际贸易”专业中获得奖学金的学生信息,包括学号、姓名、课程名和分数;
2.检索学生成绩得过满分(100分)的课程的课程号、名称和学分;
3.检索没有获得奖学金、同时至少有一门课程成绩在95分以上的学生信息,包括学号、姓名和专业;
4.检索没有任何一门课程成绩在80分以下的学生的信息,包括学号、姓名和专业;

(1)Π学生.学号,姓名,课程名,分数(σ专业=′国家贸易′∧奖学金>0(学生⋈课程⋈学习)\Pi_{学生.学号,姓名,课程名,分数} (\sigma_{专业='国家贸易'\land 奖学金>0}(学生 \bowtie 课程 \bowtie 学习)Π.,,,(σ=>0()

(2)Π课程号,名称,学分(σ分数=100(课程⋈学习))\Pi_{课程号,名称,学分}(\sigma_{分数=100}(课程 \bowtie 学习))Π,,(σ=100())

(3)Π学号,姓名,专业(σ奖学金<=100∧分数>95(学生⋈学习))\Pi_{学号,姓名,专业}(\sigma_{奖学金<=100 \land 分数>95}(学生 \bowtie 学习))Π,,(σ<=100>95())

(4)Π学号,姓名,专业(σ(学生))−Π学号,姓名,专业(σ分数<80(学生⋈学习))\Pi_{学号,姓名,专业}(\sigma(学生))-\Pi_{学号,姓名,专业}(\sigma_{分数<80}(学生\bowtie学习))Π,,(σ())Π,,(σ<80())


设有学生-课程关系数据库,其数据库关系模式(表名与属性名只取英文名)为:
学生S(学号S#,姓名SN,所在系SD,年龄SA)、
课程C(课程号C#,课程名称CN,先修课号PC#)、
学生选课SC(学号S#,课程号C#,成绩G)
(1)求学号为95001的学生所选的成绩为60分以上的课程号;
(2)求选修了“数据库概论”,并且成绩为80或90的学生的学号和姓名;★
(3)求选修了全部(有全部一般会使用到除)课程的学生学号、姓名及其所在系名★

(1)ΠC#(σS#="95001∧G>=60(SC))\Pi_{C\#}(\sigma_{S\#="95001 \land G>=60}(SC))ΠC#(σS#="95001G>=60(SC))

(2)ΠS#,SN(σC#="数据库概论"(C)⋈σG=80或G=90(SC)⋈(S))\Pi_{S\#,SN}(\sigma_{C\#="数据库概论"}(C) \bowtie \sigma_{G=80 或G=90} (SC) \bowtie(S))ΠS#,SN(σC#=""(C)σG=80G=90(SC)(S))

(3)ΠS#,SN,SD(S⋈(ΠS#,C#(SC)÷ΠC#(C)))\Pi_{S\#,SN,SD}(S \bowtie (\Pi_{S\#,C\#}(SC)\div\Pi_{C\#}(C)))ΠS#,SN,SD(S(ΠS#,C#(SC)÷ΠC#(C)))





【答案】

(1):ΠSNO(σJNO=′J1′(SPJ))\Pi_{SNO} (\sigma_{JNO='J1'}(SPJ))ΠSNO(σJNO=J1(SPJ))

(2):ΠSNO(σJNO=′J1′∧PNO=′P1′(SPJ))\Pi_{SNO} (\sigma_{JNO='J1' \land PNO='P1'}(SPJ))ΠSNO(σJNO=J1PNO=P1(SPJ))

(3):ΠSNO(ΠSNO,PNO(σJNO=′J1′(SPJ))⋈ΠPNO(σCOLOR=′红′(P)))\Pi_{SNO}(\Pi_{SNO,PNO}(\sigma _{JNO='J1'}(SPJ))\bowtie \Pi_{PNO}(\sigma_{COLOR='红'}(P)))ΠSNO(ΠSNO,PNO(σJNO=J1(SPJ))ΠPNO(σCOLOR=(P)))

(4):ΠJNO(SPJ)−ΠJNO(σcity=′天津′∧Color=′红′(S∧SPJ∧P))\Pi_{JNO}(SPJ)-\Pi_{JNO}(\sigma_{city='天津' \land Color='红'}(S\land SPJ \land P))ΠJNO(SPJ)ΠJNO(σcity=Color=(SSPJP))

(5):ΠJNO,PNO(SPJ)÷ΠPNO(σSNO=′S1′(SPJ))\Pi_{JNO,PNO}(SPJ) \div \Pi_{PNO}(\sigma_{SNO='S1'}(SPJ))ΠJNO,PNO(SPJ)÷ΠPNO(σSNO=S1(SPJ))

二:考察SQL语言

(1)说明

详细语法见专栏笔记,重点有以下几种

  • 基本表的创建、修改
  • 索引的建立
  • Select的各种语句
  • 数据的更新、删除
  • 权限

下方语句仅供参考,几乎涵盖了考试所有考察的SQL语句

//创建基本表 CREATE TABLE SC (Sno CAHR(9) PRIMARY KEY,Cno CHAR(9) PRIMARY KEY,Sage SMALLINT NOT NULL,//PRIAMRY KEY(Sno,Cno)FOREIGN KEY(Sno) REFERENCES Student(Sno),FOREIGN KEY(Cno) REFERENCES Course(Cno) );//修改基本表 ALTER TABLE Student ADD Sname CHAR(9) NOT NULL ALTER TABLE Student ADD COLUMN Sage CHAR; ALTER TABLE Student ADD UNIQUE(Cno,Cname) ALTER TABLE Student DROP COLUMN Sname CASCADE//删除基本表DROP TABLE Student CASCADE//建立索引 CREATE UNIQUE INDEX SCno ON SC(Sno ASC,Cno DESC);//修改索引 ALTER INDEX SCno RENAME TO SCSno;//查询单表 SELECT Sname,2022-Sage FROM Student;//属性列可以参与运算 SELECT Sname ‘姓名’,Sage '年龄' FROM Student;//起别名 SELECT DISTINCT Sno FROM SC;//消除重复行 SELECT Sno,Grade FROM SC WHERE Grade > 85;//满足某条件 SELECT Sname,Sdept WHERE Sdept IN('MA','CS'); SELECT Sname FROM Student WHERE Sname='刘%'; SELECT * FROM Student WHERE Sdept='CS'AND Sage < 20;//多重条件 SELECT Sno,Grade FROM SC WHERE Cno='3' ORDER BY GRADE DESC//ORDER BY 子句 SELECT AVG(Grade) FROM SC WHERE Cno='2';//聚集函数 SELECT Sno,MAX(Grade) FROM SC WHERE Cno='2'; SELECT Sno,AVG(Grade) avg FROM SC GROUP BY Sno avg >=80;//GROUP BY子句//连接查询 SELECT Student.*,SC.* FROM Student,SC WHERE Student.Sno=SC.Sno;//自然连接 SELECT Student.Sno,Sname FROM Student,SC where Student.Sno=SC.Sno AND Cno='2' AND Grade > 80; SELECT ONE.Cno,THREE.Cpno,FROM Course ONE,Course TWO,Course THREE WHERE ONE.Cpno=TWO.Cno AND TWO.Cpon=THREE.Cno;//自身连接 SELECT Sno,SC.Cno,Grade,Course.Cno,Cname,Cpno,Ccredit FROM SC INNER JOIN Course ON (SC,Cno=Course.Cno);//INNER JOIN,LEFT JOIN,RIGHT JOIN,FULL JOIN//嵌套查询 SELECT Student.Sno,Sname,Sdept FROM Student WHERE Sdept IN (SELECT Sdept FROM Studetn WHERE Snmae="刘晨");//IN谓词查询 SELECT Sno,Cno FROM SC x WHERE Grade >=(SELECT AVG(Grade) FROM SC WHERE x.Sno=Sno)//带有比较运算符的查询 SELECT Sname,Sage FROM Student WHERE Sage < ANY(Select Sage from student WHERE Sdept='CS') AND Sdept!='CS';//带有ANY(SOME)或ALL谓词的子查询//插入数据 INSERT INTO Student(Sno,Sname,Ssex,Sdept,Sage) VALUES('201215128','陈冬','男',IS,18);//插入元组 INSERT INTO Student('201215126','张世民','男','18','CS';); INSERT INTO Dept_age(Sdept,Age) SELECT Sdept,AVG(Sage) FROM Student GROUP BY Sdept;//插入子查询结果//修改数据 UPDATE Student SET Sage=22 WHERE sNO='2012151002';//修改某一个元组的值 UPDATE Student SET Sage=Sage+1;//修改多个元组的值 UPDATE SC SET Grade=0 WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept='CS');//带子查询的修改语句//删除数据 DELETE FROM Student WHERE Sno='201215128'; DELETE FROM SC; DELETE FROM SC WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept='CS');//创建视图视图 CREATE VIEW IS_student AS SELECT Sno,Sname FROM Student WHERE Sdept='IS';\ CREATE VIEW Stu_Grade_Avg(Sno,Savg) AS SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno;//修改视图 UPDATE IS_student Set Sname='刘晨' WHERE Sno='201215125' WITH CHECK OPTION;//授权授予 GRANT SELECT ON TABLE Student TO U1; GRANT ALL PRIVILEGES ON TABLE Student,Course TO U2,U3; GRANT SELECT ON TBALE SC TO PUBLIC; GRANT UPDATE(Sno),SELECT ON TBALE Student TO U4; GRANT INSERT ON TBALE SC TO U5 WITH GRANT OPTION;//允许再授权//权限回收 REVOKE UPDATE(Sno) ON TABLE Student FROM U4; REVOKE SELECT ON TABLE SC FROM PUBLIC; REVOKE INSERT ON TABLE SC FROM U5 CASCADE;//级联收回//角色及其授权、回收 CREATE ROLE R1;//创建一个角色R1 GRANT SELECT,UPDATE ON TABLE Student TO R1;//让角色拥有某种权限 GRANT R1 TO U1,U2,U3;//将角色R1拥有的权限赋给用户 REVOKE R1 FROM U1;//通过角色收回权限//完整性约束命名子句 CREATE TABLE Student//创建 (Sno NUMERIC(6) CONSTRAINT C1 CHECK(Sno BETWEEN 1 AND 100),Sname CHAR(20) CONSTRAINT C2 NOT NULL,Ssex CHAR(2) CONSTRAINT C3 CHECK(Ssex IN ('男','女')),Spro CHAR(10)CONSTRAINT C4 PRIMARY KEY(Sno),CONSTRAINT C5 FOREIGN KEY(Spro) REFERENCES P(Spro) ); ALTER TABLE Student DROP CONSTRAINT C1;//删除 ALTER TABLE Student ADD CONSTRAINT C1 CHECK(Sno BETWEEN 1 AND 10);//修改//断言 CREATE ASSERTION ASS CHECK (60 >=ALL(SELECT count(*)FROM SCGROUP BY Cno));//参照完整性中当删除或修改被参照表时参照表所作的动作 CREATE TABLE SC (Sno CHAR(9)Sno CHAR(4) Grade SMALLINT,//是外码也是主码,故不能取空值,实体完整性PRIMARY KEY(Sno,Cno),FOREIGN KEY(Sno) REFERENCES Student(Sno)ON DELETE CASCADE //删除Student表的元组时,级联删除本表相应元组ON UPDATE CASCADE, //更新Student表中的Sno时,级联更新本表相应元组FOREIGN KEY(Cno) REFERENCES Course(Cno)ON DELETE NO ACTION //删除Course表的元组造成不一致时,拒绝执行ON UPDATE CASCADE //更新Course表中的Cno时,级联更新本表相应元组 );

(2)典型例题

【答案】

SELECT * FROM S WHERE A='10';SELECT A,B FROM S;SELECT A,B,S.C,S.D,E,F FROM S,T WHERE S.C=T.C AND S.D=T.D;SELECT * FROM S,T WHERE S.C=T.C;SELECT * FROM S,T WHERE A<E;SELECT S.C,S.D,T.* FROM S,T;


  • 题目链接:(数据库系统概论|王珊)第二章关系数据库:习题

【答案】

SELECT SNO FROM SPJ WHERE JNO='J1';SELECT SNO FROM SPJ WHERE JNO='J1' AND PNO='P1';SELECT SPJ.SNO FROM SPJ,P WHERE SPJ.PNO=P.PNO AND JNO='J1' AND COLOR='红';SELECT JNO FROM SPJ WHERE JNO NOT IN (SELECT JNO FROM SPJ,S,P WHERE S.CITY='天津' AND COLOR='红' AND SPJ.SNO=S.SNO AND SPJ.PNO=P.PNO)①:先查询S1供应的零件号 SELECT PNO FROM SPJ WHERE SNO='S1' ,其结果为(P1,P2) ②:查询哪一个工程即使用P1又使用P2 SELECT JON FROM SPJ WHERE PNO='P1' AND JNO IN (SELECT JNO FROM SPJ WHERE PNO='P2');

SELECT SNAME,CTIY FROM S;SELECT PNAME,COLOR,WEIGHT FROM P;SELECT JNO FROM SPJ WHERE SNO='S1';SELECT PNAME,QTY FROM P,SPJ WHERE SPJ.PNO=P.PNO AND JNO='J2';SELECT PNO FROM SPJ,S WHERE SPJ.SNO=S.SNO AND S.CITY='上海';SELECT JNAME FROM SPJ,S,J WHERE SPJ.SNO=S.SNO AND SPJ.JNO=J.JNO AND S.CITY='上海';SELECT JNO FROM SPJ WHERE JNO NOT IN(SELECT JNO FROM SPJ,S WHERE SPJ.SNO=S.SNO AND S.CITY='天津' );UPDATE P SET COLOR='蓝' WHERE COLOR='红';UPDATE SPJ SET SNO='S3' WHERE SNO='S5' AND JNO='J4' AND PNO='P6';DELETE FROM S WHERE SNO='S2' DELETE FROM SPJ WHERE SNO='S2';INSERT INTO SPJ VALUES('S2','J6','P4',200);

【答案】

CREATE VIEW VSP AS SELECT SNO,SPJ.PNO,QTY FROM SPJ,J WHERE PPJ.JNO=J.JNO AND J.JNAME='三建'SELECT PNO,QTY FROM VSPSELECT * FROM VSP WHERE SNO='S1';

【答案】

GRANT ALL PRIVILEGES ON Student,Class TO U1 WITH CHECK OPTION;GRANT SELECT,UPDATE(Address) ON Student TO U2GRANT SELECT ON Class to PUBLICGRANT SELECT,UPDATE ON Student TO R1;GRANT R1 TO U1 WITH CHECK OPTION;

  • 职工:Workers
  • 部门:Department

【答案】

1GRANT SELECT ON Workers,Department TO 王明;2GRANT INSERT,DELETE ON Workers,Department TO 李勇;3GRANT SELECT ON Workers WHEN USER()=NAME TO ALL;(4) GRANT SELECT,UPDATE(工资)ON Workers TO 刘星;5GRANT ALTER TABLE ON Workers,Department TO 张新;6GRANT ALL PRIVILEGES ON Workers,Department TO 周平 WITH CHECK OPTION;7CREATE VIEW 部门工资 ASSELECT 部门.名称,MAX(工资),MIN(工资),AVG(工资)FROM 职工,部门WHERE 职工.部门号=部门.部门号GROUP BY 职工.部门号GRANT SELECT ON 部门工资 TO 杨兰;

【答案】

  • 把GRANT换成REVOKE,把TO换成FROM即可

三:查询树及其优化

(1)说明

  • 关于查询及查询优化见此文章:(数据库系统概论|王珊)第九章关系查询处理和关系优化-第三节:查询优化之代数优化

  • 主要会画三种树:最初的语法树,关系代数语法树,优化后的查询树

  • 题目一般会给你SQL语句(或者这个SQL语句都要你自己写),然后根据画出其对应的语法树,接着根据优化规则进行优化

(2)典型例题

【答案】

首先将SQL语句转为关系代数表达式

ΠCname(σStudent.Sdept=′IS′(σSC.Cno=Course.Cno(σStudent.Sno=SC.Sno(Student×SC)×Course)))\Pi_{Cname}(\sigma_{Student.Sdept='IS'}(\sigma_{SC.Cno=Course.Cno}(\sigma_{Student.Sno=SC.Sno }(Student × SC) × Course)))ΠCname(σStudent.Sdept=IS(σSC.Cno=Course.Cno(σStudent.Sno=SC.Sno(Student×SC)×Course)))

将关系代数表达式转为查询树


优化



【答案】


【例】查询选修了数据库课程的女生学号与姓名,如下是SQL语句

SELECT Student.Sno,Sname FROM Student,SC,Course WHERE Cname='datebase' AND Ssex='女';

将SQL语句转为关系代数表达式

ΠSno,Sname(σCname=′数据库′∧Ssex=′女′(SC⋈Course⋈Student))\Pi_{Sno,Sname}(\sigma_{Cname='数据库' \land Ssex='女'}(SC \bowtie Course \bowtie Student))ΠSno,Sname(σCname=Ssex=(SCCourseStudent))

将关系代数表达式转为查询树

查询树优化

①:选择条件复杂,先分解选择条件


②:将选择运算尽可能移动到树的叶端


③:涉及了投影运算,所以也把它尽可能移动到树的叶端

  • 投影运算下移时要保留连接属性


④:对内结点进行分组

四:E-R模型转关系模型

(1)说明

  • 详细转换规则见:(数据库系统概论|王珊)第七章数据库设计-第四节:逻辑结构设计
  • 转换的过程中,能当作实体就当做实体
  • 基本考法就是先让你画E-R图,然后转为关系模型

注意

  • 同一实体间1:m 联系:可以在这个实体所对应的关系中多设一个属性,作为与该实体相联系的另一个实体的主码
  • 同一实体间m:n 联系:要为联系单独建立一个实体,该实体包含它所联系的实体的主码,同时把联系的属性纳入其中
  • 两实体间1:1联系:把联系的属性和一方实体的主码纳入到另一个实体中
  • 两实体间1:m联系:可以将“1”方实体的主码纳入“m”方实体对应的关系中作为外码,同时把联系的属性也一并纳入“m”方对应的关系中
  • 两实体间m:n联系:必须对“联系”单独建立一个关系,该关系中至少包含被它所联系的双方实体的主码,如果联系也有属性,也一并纳入该关系中
  • 两实体间弱实体联系:可以将被依赖实体的主码纳入弱实体中,作为弱实体的主码或主码的一部分
  • 两个以上实体间m:n:必须对“联系”单独建立一个关系,该关系中至少包含被它所联系的双方实体的主码,如果联系也有属性,也一并纳入该关系中

(2)典型例题

五:有关范式

(1)说明

  • 详细内容请点击跳转:(数据库系统概论|王珊)第六章关系数据理论-第二节:规范化
  • 主要考察:判断是否为第几范式;如果不是如何解决(分解)
  • 重点考察:3NF和BCNF,其中判断是否为BCNF就是看“每一个决定因素是否都包含码”(也即不存在任何属性对码的传递函数依赖和部分函数依赖)

(2)典型例题


假设某商业集团数据库中有一关系模式R如下:
R (商店编号,商品编号,数量,部门编号,关系模式),若规定
(1) 每个商店的每种商品只在一个部门销售;
(2) 每个商店的每个部门只有一个负责人;
(3) 每个商店的每种商品只有一个库存数量。
试回答下列问题:
(1) 根据上述规定,写出关系模式R的基本函数依赖;
(2) 找出关系模式R的候选码;
(3) 试问关系模式R最高已经达到第几范式?为什么?
(4) 如果R不属于3NF,请将R分解成3NF模式集

(1)

  • (商店编号,商品编号)->部门编号
  • (商店编号,部门编号)->负责人
  • (商店编号,商品编号)->库存数量

(2)(商店编号,商品编号)

(3)显而易见,存在非主属性对码的传递函数依赖(即(商店编号,商品编号)->部门编号,又(商店编号,部门编号)->负责人,所以(商店编号,商品编号)->负责人)。因此它是2NF,不是3NF

(4)分解

  • R1(商店编号,商品编号,库存数量,部门编号)
  • R2(商店编号,商品编号,负责人)

设有关系模式R(A, B, C, D, E),R中的属性均不可再分解,若只基于函数依赖进行讨论,试根据给定的函数依赖集F,分析R最高属于第几范式,并说明原因。
(1) F={AB→C, AB→E, CDE→AB}; ABD CDE
(2) F={CD→A, CD→B, AB→E}。 CD

(1)最高属于3NF。因为候选码是CDE,ABD,但AB作为决定性因素,却不包含码,也即存在主属性对码的部分函数依赖

(2)最高属于2NF。因为候选码是CD,且存在非主属性E对码的传递函数依赖

六:关于数据库恢复

(1)说明

  • 具体请跳转:(数据库系统概论|王珊)第十章数据库恢复技术-第四、五、六、七节:数据库恢复技术和数据库镜像

(2)典型例题


【答案】
(1)T1T_{1}T1T3T_{3}T3重做;T2T_{2}T2T4T_{4}T4回滚

(2)T1T_{1}T1重做;T2T_{2}T2T3T_{3}T3回滚

(3)T1T_{1}T1重做;T2T_{2}T2T3T_{3}T3回滚

(4)T1T_{1}T1重做;T2T_{2}T2回滚



【答案】

(1)A=8、B=7、C=11

(2)A=10、B=0、C=11

(3)A=10、B=0、C=11

(4)A=10、B=0、C=11

(5)A=0、B=0、C=0


具有检查点的恢复技术

系统出现故障时,恢复子系统将根据事务的不同状态采取不同的恢复策略,如下图

  • T1T_{1}T1:在检查点之前提交
  • T2T_{2}T2:在检查点之前开始执行,在检查点之后故障点之前提交
  • T3T_{3}T3:在检查点之前开始执行,在故障点时还未完成
  • T4T_{4}T4:在检查点之后开始执行,在故障点之前提交
  • T5T_{5}T5:在检查点之后开始执行,在故障点时还未完成

  • T3T_{3}T3T5T_{5}T5在故障发生时还未完成,所以予以撤销;
  • T2T_{2}T2T4T_{4}T4在检查点之后才提交,它们对数据库所做的修改在故障发生时可能还在缓冲区中,尚未写入数据库,所以要重做;
  • T1T_{1}T1在检查点之前已提交,所以不必执行重做操作

系统使用检查点方法进行恢复的步骤是:

①:从重新开始文件中找到最后一个检查点记录在日志文件中的地址,由该地址在日志文件中找到最后一个检查点记录

②:由该检查点记录得到检查点建立时刻所有正在执行的事务清单ACTIVE-LIST。建立如下两个事物队列

  • UNDO-LIST:需要执行UNDO操作的事物集合
  • REDO-LIST:需要执行REDO操作的事物集合

③:从检查点开始正向扫描日志文件

  • 如果有新开始的事物TiT_{i}Ti,则把TiT_{i}Ti暂时放入UNDO-LIST
  • 如果有新提交的事物TjT_{j}Tj,则把TjT_{j}Tj从UNDO-LIST移到REDO-LIST
  • 重复,直到扫描日志文件结束

④:对UNDO-LIST中的每个事物执行UNDO操作;对REDO-LIST中每个事物执行REDO操作


用上图所示的例子,恢复步骤如下

①:建立ACTIVE-LIST,很明显ACTIVE-LIST={T2T_{2}T2,T3T_{3}T3}。然后初始化UNDO-LIST={T2T_{2}T2,T3T_{3}T3},REDO-LIST={}

②:从检查点开始正向扫描日志文件

  • 第一个读到的是事物T4T_{4}T4建立,加入UNDO-LIST
  • 第二个读到的是事物T2T_{2}T2提交,那么把T2T_{2}T2从UNDO-LIST移动到REDO-LIST
  • 第三个读到的是事物T5T_{5}T5建立,加入UNDO-LIST
  • 第四个读到的是事物T5T_{5}T5提交,那么把T5T_{5}T5从UNDO-LIST移动到REDO-LIST

③:对UNDO-LIST中的每个事物执行UNDO操作;对REDO-LIST中每个事物执行REDO操作

七:闭包

(1)说明

这属于离散数学的内容,专业的就不多说了,下面有一个经典的例子

U={A,B,C,D,E},R={AB->C , B->D , C->E , EC->B , AC->B},求(AB)R+_{R}^{+}R+

  • 设X0^{0}0=AB
  • 又因为AB->C,B->D,所以X1^{1}1=ABCD
  • 因为X0≠^{0}\neq0=X1^{1}1,继续查找(否则X1^{1}1就是闭包)
  • 又因为C->E,所以X2^{2}2=ABCDE
  • 所以(AB)R+_{R}^{+}R+=ABCDE

(2)典型例题

设有函数依赖集F={AB→CE, A→C, GP→B, EP→A, CDE→P, HB→P, D→HG, ABC→PG},求属性D关于F的闭包D+^{+}+

  • 设X0^{0}0=D
  • 又因为D→HG,所以X1^{1}1=DHG,X0≠^{0}\neq0=X1^{1}1
  • X2^{2}2=DHG,此时X1^{1}1=X2^{2}2
  • 所以D+^{+}+=DHG

设有函数依赖集F={AC→PE, PG→A, B→CE, A→P, GA→B, GC→A, PAB→G, AE→GB, ABCP→H},求属性集BG关于F的闭包(BG)+

  • X0^{0}0=BG
  • X1^{1}1=BGCE
  • X2^{2}2=BGCEA
  • X3^{3}3=BGCEAP
  • X3^{3}3=BGCEAPH=U
  • 故(BG)+=BGCEAPH

八:求解候选码

(1)说明

设关系模式R中U=ABC…等N个属性,U中的属性在F中有四个范围

  • 左右出现
  • 只在左部出现
  • 只在右部出现
  • 不在左右出现
  • 算法:按照以下步骤求解候选码

  • 只在F右部出现的属性,不属于候选码
  • 只在F左部出现的属性,一定存在于某候选码当中
  • 量变都没有出现的结点,一定存在于候选码中
  • 其他属性逐个与2,3的属性组合,求属性闭包,直至X的闭包等于U,若等于U,则X为候选码
  • 比如

    R{ABCDE}
    F(AB->C,AB->E,CDE->AB)

    • 可以发现没有只在右部出现的属性
    • D只在左部出现,所以一定在候选码中

    现在剩余A,B,C,E,先进行单个结合求属性闭包

    • 对于AD:AD+^{+}+=AD
    • 对于BD:BD+^{+}+=BD
    • 对于CD:CD+^{+}+=CD
    • 对于ED:ED+^{+}+=ED

    不满足条件,再结合

    • 对于ABD:ABD+^{+}+=U
    • 对于ACD:ACD+^{+}+=ACD
    • 对于AED:AED+^{+}+=AED
    • 对于BCD:BCD+^{+}+=BCD
    • 对于BED:BED+^{+}+=BED
    • 对于CED:CED+^{+}+=U

    所以候选码是ABD或CED

    (2)典型例题

    已知R(U,F),U=(A,B,C,D,E,G),F={AB->C,CD->E,E->A,A->G}。求候选码

    • 其中G只出现在右部,所以一定不属于候选码
    • 其中B,D只出现在左部,一定存在于某候选码中

    现在剩余A,C,E,先单个结合

    • 对于ABD:ABD+^{+}+=ABCDEG=U
    • 对于CBD:CBD+^{+}+=U
    • 对于BDE:BDE+^{+}+=U

    候选码是ABD,CBD,BDE

    九:有关锁的问题

    (1)说明

    • 详细内容请条件:https://zhangxing-tech.blog.csdn.net/article/details/122767899

    (2)典型例题

    (1)

    a:t1时刻甲事务读x=1000,t2时刻乙事务读取x=1000,t3时刻x被更新为700,t4时刻,乙所更新的x还是之前读取到的那个x,所以x=800

    b:Xlock x
    c:W(x)=700
    d:R(x)=700
    e:x<-x-200
    f:Unlock x

    (2)给定一个并发调度,当且仅当它是可串行化的,才认为它是正确的调度。其中可串行化调度是指多个事务的并发执行结果是正确的,并且仅当其结果与按照某一次序串行执行这些事务时的结果相同,称这种调度策略为可串行化调度


    a:SLOCK B
    b:XLOCK A
    c:写回A(=3)
    d:X=A=3
    e:UNLOCK A

    总结

    以上是生活随笔为你收集整理的【数据库题型大总结】应用题总结的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。