【数据库题型大总结】应用题总结
文章目錄
- 一:考察關(guān)系代數(shù)表達式
- (1)說明
- (2)典型例題
- 二:考察SQL語言
- (1)說明
- (2)典型例題
- 三:查詢樹及其優(yōu)化
- (1)說明
- (2)典型例題
- 四:E-R模型轉(zhuǎn)關(guān)系模型
- (1)說明
- (2)典型例題
- 五:有關(guān)范式
- (1)說明
- (2)典型例題
- 六:關(guān)于數(shù)據(jù)庫恢復(fù)
- (1)說明
- (2)典型例題
- 七:閉包
- (1)說明
- (2)典型例題
- 八:求解候選碼
- (1)說明
- (2)典型例題
- 九:有關(guān)鎖的問題
- (1)說明
- (2)典型例題
一:考察關(guān)系代數(shù)表達式
(1)說明
- 先看投影放在外
- 再看選擇放在內(nèi)
注意符號
(2)典型例題
現(xiàn)有關(guān)系數(shù)據(jù)庫如下:
學(xué)生(學(xué)號,姓名,性別,專業(yè)、獎學(xué)金)
課程(課程號,名稱,學(xué)分)
學(xué)習(xí)(學(xué)號,課程號,分數(shù))
1.檢索“國際貿(mào)易”專業(yè)中獲得獎學(xué)金的學(xué)生信息,包括學(xué)號、姓名、課程名和分數(shù);
2.檢索學(xué)生成績得過滿分(100分)的課程的課程號、名稱和學(xué)分;
3.檢索沒有獲得獎學(xué)金、同時至少有一門課程成績在95分以上的學(xué)生信息,包括學(xué)號、姓名和專業(yè);
4.檢索沒有任何一門課程成績在80分以下的學(xué)生的信息,包括學(xué)號、姓名和專業(yè);
(1)Π學(xué)生.學(xué)號,姓名,課程名,分數(shù)(σ專業(yè)=′國家貿(mào)易′∧獎學(xué)金>0(學(xué)生?課程?學(xué)習(xí))\Pi_{學(xué)生.學(xué)號,姓名,課程名,分數(shù)} (\sigma_{專業(yè)='國家貿(mào)易'\land 獎學(xué)金>0}(學(xué)生 \bowtie 課程 \bowtie 學(xué)習(xí))Π學(xué)生.學(xué)號,姓名,課程名,分數(shù)?(σ專業(yè)=′國家貿(mào)易′∧獎學(xué)金>0?(學(xué)生?課程?學(xué)習(xí))
(2)Π課程號,名稱,學(xué)分(σ分數(shù)=100(課程?學(xué)習(xí)))\Pi_{課程號,名稱,學(xué)分}(\sigma_{分數(shù)=100}(課程 \bowtie 學(xué)習(xí)))Π課程號,名稱,學(xué)分?(σ分數(shù)=100?(課程?學(xué)習(xí)))
(3)Π學(xué)號,姓名,專業(yè)(σ獎學(xué)金<=100∧分數(shù)>95(學(xué)生?學(xué)習(xí)))\Pi_{學(xué)號,姓名,專業(yè)}(\sigma_{獎學(xué)金<=100 \land 分數(shù)>95}(學(xué)生 \bowtie 學(xué)習(xí)))Π學(xué)號,姓名,專業(yè)?(σ獎學(xué)金<=100∧分數(shù)>95?(學(xué)生?學(xué)習(xí)))
(4)Π學(xué)號,姓名,專業(yè)(σ(學(xué)生))?Π學(xué)號,姓名,專業(yè)(σ分數(shù)<80(學(xué)生?學(xué)習(xí)))\Pi_{學(xué)號,姓名,專業(yè)}(\sigma(學(xué)生))-\Pi_{學(xué)號,姓名,專業(yè)}(\sigma_{分數(shù)<80}(學(xué)生\bowtie學(xué)習(xí)))Π學(xué)號,姓名,專業(yè)?(σ(學(xué)生))?Π學(xué)號,姓名,專業(yè)?(σ分數(shù)<80?(學(xué)生?學(xué)習(xí)))
設(shè)有學(xué)生-課程關(guān)系數(shù)據(jù)庫,其數(shù)據(jù)庫關(guān)系模式(表名與屬性名只取英文名)為:
學(xué)生S(學(xué)號S#,姓名SN,所在系SD,年齡SA)、
課程C(課程號C#,課程名稱CN,先修課號PC#)、
學(xué)生選課SC(學(xué)號S#,課程號C#,成績G)
(1)求學(xué)號為95001的學(xué)生所選的成績?yōu)?0分以上的課程號;
(2)求選修了“數(shù)據(jù)庫概論”,并且成績?yōu)?0或90的學(xué)生的學(xué)號和姓名;★
(3)求選修了全部(有全部一般會使用到除)課程的學(xué)生學(xué)號、姓名及其所在系名★
(1)ΠC#(σS#="95001∧G>=60(SC))\Pi_{C\#}(\sigma_{S\#="95001 \land G>=60}(SC))ΠC#?(σS#="95001∧G>=60?(SC))
(2)ΠS#,SN(σC#="數(shù)據(jù)庫概論"(C)?σG=80或G=90(SC)?(S))\Pi_{S\#,SN}(\sigma_{C\#="數(shù)據(jù)庫概論"}(C) \bowtie \sigma_{G=80 或G=90} (SC) \bowtie(S))ΠS#,SN?(σC#="數(shù)據(jù)庫概論"?(C)?σG=80或G=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=′J1′∧PNO=′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=′紅′?(S∧SPJ∧P))
(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)說明
詳細語法見專欄筆記,重點有以下幾種
- 基本表的創(chuàng)建、修改
- 索引的建立
- Select的各種語句
- 數(shù)據(jù)的更新、刪除
- 權(quán)限
下方語句僅供參考,幾乎涵蓋了考試所有考察的SQL語句
//創(chuàng)建基本表 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;//消除重復(fù)行 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';//聚集函數(shù) 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謂詞的子查詢//插入數(shù)據(jù) 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;//插入子查詢結(jié)果//修改數(shù)據(jù) 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');//帶子查詢的修改語句//刪除數(shù)據(jù) DELETE FROM Student WHERE Sno='201215128'; DELETE FROM SC; DELETE FROM SC WHERE Sno IN(SELECT Sno FROM Student WHERE Sdept='CS');//創(chuàng)建視圖視圖 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;//授權(quán)授予 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;//允許再授權(quán)//權(quán)限回收 REVOKE UPDATE(Sno) ON TABLE Student FROM U4; REVOKE SELECT ON TABLE SC FROM PUBLIC; REVOKE INSERT ON TABLE SC FROM U5 CASCADE;//級聯(lián)收回//角色及其授權(quán)、回收 CREATE ROLE R1;//創(chuàng)建一個角色R1 GRANT SELECT,UPDATE ON TABLE Student TO R1;//讓角色擁有某種權(quán)限 GRANT R1 TO U1,U2,U3;//將角色R1擁有的權(quán)限賦給用戶 REVOKE R1 FROM U1;//通過角色收回權(quán)限//完整性約束命名子句 CREATE TABLE Student//創(chuàng)建 (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));//參照完整性中當(dāng)刪除或修改被參照表時參照表所作的動作 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表的元組時,級聯(lián)刪除本表相應(yīng)元組ON UPDATE CASCADE, //更新Student表中的Sno時,級聯(lián)更新本表相應(yīng)元組FOREIGN KEY(Cno) REFERENCES Course(Cno)ON DELETE NO ACTION //刪除Course表的元組造成不一致時,拒絕執(zhí)行ON UPDATE CASCADE //更新Course表中的Cno時,級聯(lián)更新本表相應(yīng)元組 );(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;
- 題目鏈接:(數(shù)據(jù)庫系統(tǒng)概論|王珊)第二章關(guān)系數(shù)據(jù)庫:習(xí)題
【答案】
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供應(yīng)的零件號 SELECT PNO FROM SPJ WHERE SNO='S1' ,其結(jié)果為(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
【答案】
(1) GRANT SELECT ON Workers,Department TO 王明;(2) GRANT INSERT,DELETE ON Workers,Department TO 李勇;(3) GRANT SELECT ON Workers WHEN USER()=NAME TO ALL;(4) GRANT SELECT,UPDATE(工資)ON Workers TO 劉星;(5) GRANT ALTER TABLE ON Workers,Department TO 張新;(6) GRANT ALL PRIVILEGES ON Workers,Department TO 周平 WITH CHECK OPTION;(7) CREATE VIEW 部門工資 ASSELECT 部門.名稱,MAX(工資),MIN(工資),AVG(工資)FROM 職工,部門WHERE 職工.部門號=部門.部門號GROUP BY 職工.部門號GRANT SELECT ON 部門工資 TO 楊蘭;【答案】
- 把GRANT換成REVOKE,把TO換成FROM即可
三:查詢樹及其優(yōu)化
(1)說明
-
關(guān)于查詢及查詢優(yōu)化見此文章:(數(shù)據(jù)庫系統(tǒng)概論|王珊)第九章關(guān)系查詢處理和關(guān)系優(yōu)化-第三節(jié):查詢優(yōu)化之代數(shù)優(yōu)化
-
主要會畫三種樹:最初的語法樹,關(guān)系代數(shù)語法樹,優(yōu)化后的查詢樹
-
題目一般會給你SQL語句(或者這個SQL語句都要你自己寫),然后根據(jù)畫出其對應(yīng)的語法樹,接著根據(jù)優(yōu)化規(guī)則進行優(yōu)化
(2)典型例題
【答案】
首先將SQL語句轉(zhuǎn)為關(guān)系代數(shù)表達式
Π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)))
將關(guān)系代數(shù)表達式轉(zhuǎn)為查詢樹
優(yōu)化
【答案】
【例】查詢選修了數(shù)據(jù)庫課程的女生學(xué)號與姓名,如下是SQL語句
SELECT Student.Sno,Sname FROM Student,SC,Course WHERE Cname='datebase' AND Ssex='女';將SQL語句轉(zhuǎn)為關(guān)系代數(shù)表達式
ΠSno,Sname(σCname=′數(shù)據(jù)庫′∧Ssex=′女′(SC?Course?Student))\Pi_{Sno,Sname}(\sigma_{Cname='數(shù)據(jù)庫' \land Ssex='女'}(SC \bowtie Course \bowtie Student))ΠSno,Sname?(σCname=′數(shù)據(jù)庫′∧Ssex=′女′?(SC?Course?Student))
將關(guān)系代數(shù)表達式轉(zhuǎn)為查詢樹
查詢樹優(yōu)化
①:選擇條件復(fù)雜,先分解選擇條件
②:將選擇運算盡可能移動到樹的葉端
③:涉及了投影運算,所以也把它盡可能移動到樹的葉端
- 投影運算下移時要保留連接屬性
④:對內(nèi)結(jié)點進行分組
四:E-R模型轉(zhuǎn)關(guān)系模型
(1)說明
- 詳細轉(zhuǎn)換規(guī)則見:(數(shù)據(jù)庫系統(tǒng)概論|王珊)第七章數(shù)據(jù)庫設(shè)計-第四節(jié):邏輯結(jié)構(gòu)設(shè)計
- 轉(zhuǎn)換的過程中,能當(dāng)作實體就當(dāng)做實體
- 基本考法就是先讓你畫E-R圖,然后轉(zhuǎn)為關(guān)系模型
注意
- 同一實體間1:m 聯(lián)系:可以在這個實體所對應(yīng)的關(guān)系中多設(shè)一個屬性,作為與該實體相聯(lián)系的另一個實體的主碼
- 同一實體間m:n 聯(lián)系:要為聯(lián)系單獨建立一個實體,該實體包含它所聯(lián)系的實體的主碼,同時把聯(lián)系的屬性納入其中
- 兩實體間1:1聯(lián)系:把聯(lián)系的屬性和一方實體的主碼納入到另一個實體中
- 兩實體間1:m聯(lián)系:可以將“1”方實體的主碼納入“m”方實體對應(yīng)的關(guān)系中作為外碼,同時把聯(lián)系的屬性也一并納入“m”方對應(yīng)的關(guān)系中
- 兩實體間m:n聯(lián)系:必須對“聯(lián)系”單獨建立一個關(guān)系,該關(guān)系中至少包含被它所聯(lián)系的雙方實體的主碼,如果聯(lián)系也有屬性,也一并納入該關(guān)系中
- 兩實體間弱實體聯(lián)系:可以將被依賴實體的主碼納入弱實體中,作為弱實體的主碼或主碼的一部分
- 兩個以上實體間m:n:必須對“聯(lián)系”單獨建立一個關(guān)系,該關(guān)系中至少包含被它所聯(lián)系的雙方實體的主碼,如果聯(lián)系也有屬性,也一并納入該關(guān)系中
(2)典型例題
五:有關(guān)范式
(1)說明
- 詳細內(nèi)容請點擊跳轉(zhuǎn):(數(shù)據(jù)庫系統(tǒng)概論|王珊)第六章關(guān)系數(shù)據(jù)理論-第二節(jié):規(guī)范化
- 主要考察:判斷是否為第幾范式;如果不是如何解決(分解)
- 重點考察:3NF和BCNF,其中判斷是否為BCNF就是看“每一個決定因素是否都包含碼”(也即不存在任何屬性對碼的傳遞函數(shù)依賴和部分函數(shù)依賴)
(2)典型例題
假設(shè)某商業(yè)集團數(shù)據(jù)庫中有一關(guān)系模式R如下:
R (商店編號,商品編號,數(shù)量,部門編號,關(guān)系模式),若規(guī)定
(1) 每個商店的每種商品只在一個部門銷售;
(2) 每個商店的每個部門只有一個負責(zé)人;
(3) 每個商店的每種商品只有一個庫存數(shù)量。
試回答下列問題:
(1) 根據(jù)上述規(guī)定,寫出關(guān)系模式R的基本函數(shù)依賴;
(2) 找出關(guān)系模式R的候選碼;
(3) 試問關(guān)系模式R最高已經(jīng)達到第幾范式?為什么?
(4) 如果R不屬于3NF,請將R分解成3NF模式集
(1)
- (商店編號,商品編號)->部門編號
- (商店編號,部門編號)->負責(zé)人
- (商店編號,商品編號)->庫存數(shù)量
(2)(商店編號,商品編號)
(3)顯而易見,存在非主屬性對碼的傳遞函數(shù)依賴(即(商店編號,商品編號)->部門編號,又(商店編號,部門編號)->負責(zé)人,所以(商店編號,商品編號)->負責(zé)人)。因此它是2NF,不是3NF
(4)分解
- R1(商店編號,商品編號,庫存數(shù)量,部門編號)
- R2(商店編號,商品編號,負責(zé)人)
設(shè)有關(guān)系模式R(A, B, C, D, E),R中的屬性均不可再分解,若只基于函數(shù)依賴進行討論,試根據(jù)給定的函數(shù)依賴集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作為決定性因素,卻不包含碼,也即存在主屬性對碼的部分函數(shù)依賴
(2)最高屬于2NF。因為候選碼是CD,且存在非主屬性E對碼的傳遞函數(shù)依賴
六:關(guān)于數(shù)據(jù)庫恢復(fù)
(1)說明
- 具體請?zhí)D(zhuǎn):(數(shù)據(jù)庫系統(tǒng)概論|王珊)第十章數(shù)據(jù)庫恢復(fù)技術(shù)-第四、五、六、七節(jié):數(shù)據(jù)庫恢復(fù)技術(shù)和數(shù)據(jù)庫鏡像
(2)典型例題
【答案】
(1)T1T_{1}T1?、T3T_{3}T3?重做;T2T_{2}T2?、T4T_{4}T4?回滾
(2)T1T_{1}T1?重做;T2T_{2}T2?、T3T_{3}T3?回滾
(3)T1T_{1}T1?重做;T2T_{2}T2?、T3T_{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
具有檢查點的恢復(fù)技術(shù)
系統(tǒng)出現(xiàn)故障時,恢復(fù)子系統(tǒng)將根據(jù)事務(wù)的不同狀態(tài)采取不同的恢復(fù)策略,如下圖
- T1T_{1}T1?:在檢查點之前提交
- T2T_{2}T2?:在檢查點之前開始執(zhí)行,在檢查點之后故障點之前提交
- T3T_{3}T3?:在檢查點之前開始執(zhí)行,在故障點時還未完成
- T4T_{4}T4?:在檢查點之后開始執(zhí)行,在故障點之前提交
- T5T_{5}T5?:在檢查點之后開始執(zhí)行,在故障點時還未完成
- T3T_{3}T3?和T5T_{5}T5?在故障發(fā)生時還未完成,所以予以撤銷;
- T2T_{2}T2?和 T4T_{4}T4?在檢查點之后才提交,它們對數(shù)據(jù)庫所做的修改在故障發(fā)生時可能還在緩沖區(qū)中,尚未寫入數(shù)據(jù)庫,所以要重做;
- T1T_{1}T1?在檢查點之前已提交,所以不必執(zhí)行重做操作
系統(tǒng)使用檢查點方法進行恢復(fù)的步驟是:
①:從重新開始文件中找到最后一個檢查點記錄在日志文件中的地址,由該地址在日志文件中找到最后一個檢查點記錄
②:由該檢查點記錄得到檢查點建立時刻所有正在執(zhí)行的事務(wù)清單ACTIVE-LIST。建立如下兩個事物隊列
- UNDO-LIST:需要執(zhí)行UNDO操作的事物集合
- REDO-LIST:需要執(zhí)行REDO操作的事物集合
③:從檢查點開始正向掃描日志文件
- 如果有新開始的事物TiT_{i}Ti?,則把TiT_{i}Ti?暫時放入UNDO-LIST
- 如果有新提交的事物TjT_{j}Tj?,則把TjT_{j}Tj?從UNDO-LIST移到REDO-LIST
- 重復(fù),直到掃描日志文件結(jié)束
④:對UNDO-LIST中的每個事物執(zhí)行UNDO操作;對REDO-LIST中每個事物執(zhí)行REDO操作
用上圖所示的例子,恢復(fù)步驟如下
①:建立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中的每個事物執(zhí)行UNDO操作;對REDO-LIST中每個事物執(zhí)行REDO操作
七:閉包
(1)說明
這屬于離散數(shù)學(xué)的內(nèi)容,專業(yè)的就不多說了,下面有一個經(jīng)典的例子
U={A,B,C,D,E},R={AB->C , B->D , C->E , EC->B , AC->B},求(AB)R+_{R}^{+}R+?
- 設(shè)X0^{0}0=AB
- 又因為AB->C,B->D,所以X1^{1}1=ABCD
- 因為X0≠^{0}\neq0?=X1^{1}1,繼續(xù)查找(否則X1^{1}1就是閉包)
- 又因為C->E,所以X2^{2}2=ABCDE
- 所以(AB)R+_{R}^{+}R+?=ABCDE
(2)典型例題
設(shè)有函數(shù)依賴集F={AB→CE, A→C, GP→B, EP→A, CDE→P, HB→P, D→HG, ABC→PG},求屬性D關(guān)于F的閉包D+^{+}+
- 設(shè)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
設(shè)有函數(shù)依賴集F={AC→PE, PG→A, B→CE, A→P, GA→B, GC→A, PAB→G, AE→GB, ABCP→H},求屬性集BG關(guān)于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)說明
設(shè)關(guān)系模式R中U=ABC…等N個屬性,U中的屬性在F中有四個范圍
算法:按照以下步驟求解候選碼
比如
R{ABCDE}
F(AB->C,AB->E,CDE->AB)
- 可以發(fā)現(xiàn)沒有只在右部出現(xiàn)的屬性
- D只在左部出現(xiàn),所以一定在候選碼中
現(xiàn)在剩余A,B,C,E,先進行單個結(jié)合求屬性閉包
- 對于AD:AD+^{+}+=AD
- 對于BD:BD+^{+}+=BD
- 對于CD:CD+^{+}+=CD
- 對于ED:ED+^{+}+=ED
不滿足條件,再結(jié)合
- 對于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只出現(xiàn)在右部,所以一定不屬于候選碼
- 其中B,D只出現(xiàn)在左部,一定存在于某候選碼中
現(xiàn)在剩余A,C,E,先單個結(jié)合
- 對于ABD:ABD+^{+}+=ABCDEG=U
- 對于CBD:CBD+^{+}+=U
- 對于BDE:BDE+^{+}+=U
候選碼是ABD,CBD,BDE
九:有關(guān)鎖的問題
(1)說明
- 詳細內(nèi)容請條件:https://zhangxing-tech.blog.csdn.net/article/details/122767899
(2)典型例題
(1)
a:t1時刻甲事務(wù)讀x=1000,t2時刻乙事務(wù)讀取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)給定一個并發(fā)調(diào)度,當(dāng)且僅當(dāng)它是可串行化的,才認為它是正確的調(diào)度。其中可串行化調(diào)度是指多個事務(wù)的并發(fā)執(zhí)行結(jié)果是正確的,并且僅當(dāng)其結(jié)果與按照某一次序串行執(zhí)行這些事務(wù)時的結(jié)果相同,稱這種調(diào)度策略為可串行化調(diào)度
a:SLOCK B
b:XLOCK A
c:寫回A(=3)
d:X=A=3
e:UNLOCK A
總結(jié)
以上是生活随笔為你收集整理的【数据库题型大总结】应用题总结的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: DDR2基础
- 下一篇: nginx upstream setti