wap手機(jī)網(wǎng)站源碼企業(yè)網(wǎng)站的作用有哪些
數(shù)據(jù)庫搞得人一頭霧水,題型太多太雜,已經(jīng)準(zhǔn)備擺爛了。就刷刷往年試卷,掛不掛聽天由命。
2019年
Question 1 選擇題
1. R ∩ S R∩S R∩S等于一下哪個選項?
畫個文氏圖秒了
所以選A. R ∩ S = R ? ( R ? S ) R∩S=R-(R-S) R∩S=R?(R?S)
2.哪個操作要求兩個參與的關(guān)系具有相同數(shù)量的屬性?
- A.外連接(Outer join):先看定義,參見上一篇數(shù)據(jù)庫的期末筆記
- 我們以左外連接為例子。假設(shè)有兩個關(guān)系表,表 A(員工表)和表 B(部門表),通過員工所屬部門 ID 進(jìn)行連接。表 A 有員工 ID、員工姓名、部門 ID 等字段,表 B 有部門 ID、部門名稱等字段。如果使用左外連接,那么會返回表 A 中的所有員工記錄,即使某些員工在表 B 中沒有對應(yīng)的部門信息(即部門 ID 在表 B 中不存在),這些員工記錄也會被返回,只是對應(yīng)的部門名稱等右表字段會顯示為 NULL。
- B.自然連接(Natural join):直接舉例子
- C.笛卡爾積(Cartesian product):最復(fù)雜的一個,很常考,我們這里先舉個簡單的例子
- D. 并集(Union):并集操作要求兩個參與的關(guān)系具有相同數(shù)量的屬性,并且對應(yīng)屬性的數(shù)據(jù)類型也必須相同,故選D。
3.投影(PROJECTION)操作對應(yīng)下列哪一個語句?
首先我們要知道投影是啥,去查一下定義:
- A.
HAVING
子句通常用于在分組查詢中對分組結(jié)果進(jìn)行篩選,與投影操作的功能不同。 - B.
SELECT
子句用于指定要從數(shù)據(jù)庫中檢索的列,這與關(guān)系代數(shù)中的投影操作是類似的,都是對列的選擇。例如,在關(guān)系代數(shù)中,如果有一個關(guān)系R(A,B,C)
,進(jìn)行投影操作π_{A,B}(R)
,就是選擇R
關(guān)系中的A
和B
列;在 SQL 中,SELECT A,B FROM R
也是選擇R
表中的A
和B
列。 - C.
FROM
子句用于指定要查詢的表或視圖,它主要是確定數(shù)據(jù)的來源,而不是對列的選擇,與投影操作不對應(yīng)。 - D.
WHERE
子句用于在查詢中設(shè)置條件,對行進(jìn)行篩選,而不是對列的選擇,與投影操作的功能不同。
4.關(guān)系 R ( A , B , C ) R(A,B,C) R(A,B,C)包含 10 10 10個元組,關(guān)系 S ( A , D , E , F ) S(A,D,E,F) S(A,D,E,F)包含 15 15 15個元組。那么“ R R R自然全外連接 S S S”的操作結(jié)果不可能是____。
自然連接是啥我們第一題剛剛講過,觀察那個例子,我們發(fā)現(xiàn)自然連接的結(jié)果中最少是原本元組多的那個關(guān)系的元組數(shù),最多是原本的兩個關(guān)系的元組數(shù)相加,為什么呢?還是看剛才那個例子,假如三個課程分屬不同系,而兩個學(xué)生不在這兩個系中的任何系,最后的結(jié)果自然每個系都要占一行也就是6行;而如果每個學(xué)生所在的系都在課程表中有對應(yīng)的話自然是行數(shù)最小的情況,至少每個課程要占據(jù)一行吧。
回到這一題,B選項的10個元組自然就是不可能的。
5.哪個指令用于刪除一個表?
在SQL中,DROP TABLE
是用于刪除表的標(biāo)準(zhǔn)命令。DELETE
通常用于刪除表中的數(shù)據(jù)行,而不是刪除整個表;REVOKE
用于撤銷用戶的權(quán)限,與刪除表無關(guān);REMOVE
不是SQL中用于刪除表的正確語法。
6.哪條指令可以正確地找到所有姓氏不是“Zhang”的學(xué)生?
首先前面肯定是SELECT name FROM student WHERE
,問題就是后面如何操作,首先我們要知道如何篩選姓Zhang的,姓Zhang意味著名字最前面是Zhang,按照SQL的查詢規(guī)則,我們要輸入'Zhang%'
,然后因為我們用了%
表示后面接什么都算所以這是一個模糊匹配,不能使用<>
(不等于)這樣一個語法,必須使用like
或者not like
(沒有is not like
這種語法),然后我們要的是不姓“Zhang”的所以最后就選C.SELECT name FROM student WHERE name not like 'Zhang%'
。
7.下列哪個指令和NOT IN
等價?
首先<>
上一題我們說了是不等于,ALL
就是遍歷后面集合的所有元素,必須全部不相等才算,也就是和NOT IN
等價,選A。而SOME
則是只要不等于集合中其中一個元素就算。
8.下列哪些說法是正確的?
首先我們要知道NULL的比較規(guī)則,參考這里
所以A和B肯定是錯的,C是對元組的比較,就元組而言兩個元組詩完全相等的,所以選C。
9.程序員在哪個層級與數(shù)據(jù)交互?
在概念總結(jié)的第一章就有提到
你就想奧,你不是手搓數(shù)據(jù)庫的話肯定不至于去物理層,視圖層又是給用戶用的,所以選B邏輯層。
10.如果從實體集A到實體集B的映射基數(shù)是多對一,那么A中的一個實體與B中的多少實體相關(guān)聯(lián)?
這不是顧名思義?除非你看不懂題目,many to one不知道是多對一的意思,答案選A至多一個。
11.一個或多個屬性的最小集合,足以唯一地區(qū)分每個實體,被稱為什么?
先看定義
所以肯定選B候選碼。
12.下列哪個是商業(yè)數(shù)據(jù)庫系統(tǒng)中使用的一種非過程性語言?
你不需要知道別的,總不可能不知道SQL是一種非過程性語言吧,選C。
13.關(guān)系模式是由什么組成?
關(guān)系模式是對關(guān)系(可以簡單理解為數(shù)據(jù)庫中的表)結(jié)構(gòu)的一種抽象描述,它是一組屬性(attributes)的集合,所以選B。
說人話怎么理解呢,關(guān)系模式就是那個表的首行,就是寫著每一列存什么元素的那一行,存儲的是一個填表格的規(guī)則。
14.在關(guān)系數(shù)據(jù)庫系統(tǒng)中,哪種屬性被特征化了?
先看定義
然后特征化又是啥呢?專業(yè)地說就是可以理解為對某種事物(這里指屬性)的典型特點、性質(zhì)或表現(xiàn)形式進(jìn)行明確的界定和描述,使其具有獨特的、可識別的標(biāo)志或?qū)傩?#xff0c;以便與其他事物區(qū)分開來。簡單來說就是具有不可分割性。那么在選項中就只有簡單屬性滿足這一條件,選A。
15.E-R 圖使用什么來表示關(guān)系集?
看課本上的圖6.3作為例子,左右兩個矩形框是實體集,分別是老師和學(xué)生,里面標(biāo)好了這兩個集內(nèi)的屬性,中間那個advisor表示教師和學(xué)生之間具有advisor這一關(guān)系(翻譯成中文就是教導(dǎo)關(guān)系),所以關(guān)系集是以菱形表示的,選B。
16.觀察表格內(nèi)的關(guān)系,哪個函數(shù)依賴是可能的?
這種題我們就看左右關(guān)系是不是唯一地,比如A選項是A --> (D,E)
,那么要求是A這一列為不同值時(D,E)的組合一定不同,這一題就是選A。我們以B為反例看一看,B選項D --> A
,但是我們看到表格中D這一列出現(xiàn)了兩次d4
,而且每次出現(xiàn)對應(yīng)那一行的A還不一樣,分別是a3
和a4
,所以這一個依賴關(guān)系自然就不成立。
17.假設(shè)我們將模式 r(A,B,C) 分解為 r1(A,B) 和 r2(A,C)。哪個函數(shù)依賴能讓這次分解是無損分解?
按照慣例,先看定義
那也就是說無損分解是指將一個關(guān)系模式分解為多個子模式后,通過對這些子模式進(jìn)行自然連接操作可以還原到原來的關(guān)系模式,且不會產(chǎn)生多余的元組(信息不會丟失)。
- A.或兩邊的情況是等價的,我們就看
B-->A
,你想一下這何止是有損,我們合并的時候先把沒變動的r2抄下來,然后我們已知的AC都無法定位任何一個B,直接超級大展開,數(shù)據(jù)給我損完了都 - B.和上面類似,我必須有(B,C)才能確定唯一地A,但是我在合并的中途上哪給你找(A,B)的組,自然也是有損
- C.還是剛才那個流程,我們把r2抄下來,現(xiàn)在有A和C,我們的A剛好都可以定位唯一的一個B,那我們這個B可以盡可能不加行地塞到已有的行里面,這是無損的,選C
18.假設(shè) R(X,Y,Z)
有三個單屬性 X
、Y
和 Z
。如果 (X,Y,Z)
是候選碼,那么以下哪個陳述成立?
先看定義
然后我們還知道候選碼是足以區(qū)分每個實體的最小屬性集合,也就是說比(X,Y,Z)元素少的集合是必然不足以區(qū)分每個實體的,再加上這個關(guān)系R一共就這么三個屬性,所以(X,Y,Z)是唯一的候選鍵,自然能保證所有函數(shù)依賴的左部都包含任一(也是唯一)的候選鍵,故 R ∈ B C N F R∈BCNF R∈BCNF,選A。
19.以下哪一性質(zhì)確保事務(wù)的所有影響要么都反映在數(shù)據(jù)庫中,要么都不反映?
定義位于第13章,直接秒了選A。
20.檢查點的執(zhí)行不進(jìn)行哪一步操作?
- 檢查點(Checkpoint)的作用和執(zhí)行過程:檢查點是數(shù)據(jù)庫管理系統(tǒng)中用于恢復(fù)的一種機(jī)制。它的主要目的是減少系統(tǒng)故障恢復(fù)時需要處理的日志量,提高恢復(fù)效率。在執(zhí)行檢查點時,通常會進(jìn)行以下操作:
- A選項:將當(dāng)前駐留在主存中的所有日志記錄輸出到穩(wěn)定存儲(如磁盤等非易失性存儲),這樣可以確保日志記錄的持久性,以便在故障恢復(fù)時使用,這是檢查點執(zhí)行的一部分。
- B選項:將所有已修改的緩沖塊輸出到磁盤,這是為了確保數(shù)據(jù)的一致性和持久性,也是檢查點的重要操作之一。
- D選項:將形如
<checkpoint L>
的日志記錄輸出到穩(wěn)定存儲,用于標(biāo)記檢查點的位置,方便后續(xù)恢復(fù)操作,這是檢查點執(zhí)行過程中的一個關(guān)鍵步驟。 - C選項:僅僅寫入一個緩沖塊,這并不能完成檢查點的整體功能和目的,檢查點需要對整個系統(tǒng)的狀態(tài)進(jìn)行記錄和保存,包括日志記錄和已修改的數(shù)據(jù)塊等,而不是單個緩沖塊的寫入,所以C選項不是檢查點的執(zhí)行方式。
- 所以選C。
Question 2 寫關(guān)系代數(shù)表達(dá)式和SQL語句
首先題目說了我們有這么一個數(shù)據(jù)庫
member(no, name, age)
book(isbn, title, author, publisher)
borrowed(mem_no, isbn, date)
那就是說有這么個圖書館的數(shù)據(jù)庫,有三個表分別記錄了用戶信息(id,姓名,年齡),書籍信息(isbn,書名,作者,出版商)和借書信息(借書人的id,書的isbn,借書時間)
1.寫關(guān)系代數(shù)表達(dá)式查詢’2019-12-25’借出的所有書的isbn
先看看這個關(guān)系代數(shù)表達(dá)式詳細(xì)教程吧家人們,寫出來長這樣 π i s b n ( σ d a t e = ′ 2019 ? 12 ? 2 5 ′ ( b o r r o w e d ) ) \pi_{isbn}(\sigma_{date = '2019-12-25'}(borrowed)) πisbn?(σdate=′2019?12?25′?(borrowed))簡單解釋一下,先是我們選擇題遇到過的投影操作也就是 π \pi π,下標(biāo)表示選擇的是哪一列,我們要看isbn所以肯定選擇isbn那一列嘛。然后是要選擇日期為’2019-12-25’的元組,選擇就是 σ \sigma σ,下標(biāo)表示要求date = '2019-12-25'
也就是日期這一項得等于’2019-12-25’,最后那個括號表示我們是在borrowed
這個表里面去查詢的。
2.寫關(guān)系代數(shù)表達(dá)式和SQL語句查詢所有借過’Database System’這本書的用戶的名字
首先我們先理清楚思路,因為書名人名和借書信息分屬三個表,所以我們肯定要先連接一下子,然后我們直接查詢書名為Database System
的元組的人名就行了對吧,但是現(xiàn)在還有一個問題,同樣是用戶id,borrowed表里面存的叫mem_id,member里面直接存的就叫id,為了解決這個不同名的情況,我們可以用笛卡爾積,然后選擇時加一個mem_id=id的條件
關(guān)系代數(shù)表達(dá)式
π n a m e ( σ n o = m e m n o ? t i t l e = ′ D a t a b a s e S y s t e m ′ ( m e m b e r × ( b o r r o w e d ? b o o k ) ) \pi_{name}(σ_{no=mem_no? title='Database System'}(member×(borrowed?book)) πname?(σno=memn?o?title=′DatabaseSystem′?(member×(borrowed?book))
SQL語句
select name
from member, borrowed natural join book
where no=mem_no and title='database system'
3.寫關(guān)系代數(shù)表達(dá)式和SQL語句查詢每個出版商出版作者為’Lu Xun’的書籍的數(shù)量
先選取所有魯迅寫的書作為一個集合,然后根據(jù)isbn去給每個出版商計數(shù),不按書名是因為書名可能會重,可能兩家出版社出版了兩種不同的《吶喊》這種情況
關(guān)系代數(shù)表達(dá)式
π p u b l i s h e r , c o u n t ( i s b n ) ( σ a u t h o r = ′ L u X u n ′ ( b o o k ) ) \pi_{publisher, count(isbn)}(\sigma_{author = 'Lu Xun'}(book) ) πpublisher,count(isbn)?(σauthor=′LuXun′?(book))
SQL語句
SELECT publisher, COUNT(isbn)
FROM book
WHERE author = 'Lu Xun'
GROUP BY publisher;
4.寫SQL語句查詢所有借書數(shù)量比編號1001的用戶多的用戶的編號
select mem_no
from borrowed
group by mem_no
having count(isbn)>(select count(isbn)
from borrowed
where mem_no='1001')
5.用SQL語句查詢所有借過’SCAU Press’出版的書的用戶的名字
select name
from member as m
where not exist ( (select isbn
from book
where publisher='SCAU press')
except
(select isbn
from borrowed
where mem_no=m.no) )
Question 3 畫E-R圖以及寫關(guān)系模式
1.為以下情況繪制 E-R 圖:一部小說由且僅由一位作者撰寫。小說寫完后,由且僅由一家出版商出版。每部小說可以在許多不同的書店以不同的價格出售。一部小說具有諸如 ID、名稱、字?jǐn)?shù)、類型等屬性。一位作者具有諸如 ID、姓名、國籍、生日等屬性。一家出版商具有諸如 ID、名稱、資產(chǎn)、電話號碼等屬性。一家書店具有諸如 ID、名稱、位置、電話號碼等屬性。
上面選擇題的時候我們已經(jīng)簡單聊過了E-R圖,當(dāng)時說的內(nèi)容基本足以畫出這一題的E-R圖了,值得注意的幾個點包括
- 每個書店會以不同的價格出售同一本書,所以有價格這樣一個標(biāo)簽連在出售關(guān)系上
- 關(guān)系集有的時候要有箭頭,還有就是被連接的兩個屬性集的關(guān)聯(lián)項要加下劃線
2.將你的 E-R 圖轉(zhuǎn)換為關(guān)系模式。指定每個模式的主鍵和外鍵。你可以按照以下格式書寫答案:“R (a1, a2, a3, a4), 外鍵: a4”。
主要難處理的就是price那一片嘛,其實就比較自由,只要能把整個關(guān)系弄清楚就行,答案上這一部分他就直接開了一個新的Sold表連到Bookstore和Novel上面,還加了bookstore_ID之類的屬性
Novel(ID, name, words, type, publisherID, writerID), foreign key: publisherID (reference publisher(ID)), writerID (reference writer(ID))
Writer(ID, name, nationality, birthday)
Publisher(ID, name, asset, phone)
Bookstore(ID, name, location, phone)
Sold(novel_ID, bookstore_ID, price), foreign key: novel_ID(reference novel(ID)), bookstore_ID(reference bookstore(ID))
Question 4 關(guān)系模式的操作
考慮關(guān)系模式 R (A,B,C,D) 上的以下函數(shù)依賴集 F:
A → C
C → A
B → AC
D → AC
1.計算 ( A D ) + {(AD)}^{+} (AD)+
首先我們要知道 ( A D ) + {(AD)}^{+} (AD)+是個什么東西,如果你對離散數(shù)學(xué)還有印象,這個東西叫閉包,那我們怎么算呢?
就是首先一個集合,把A和D先放進(jìn)去,然后去上面那個依賴集里面找,A都指向誰了,指向了C那把C也放進(jìn)來,再看D指向AC了,已經(jīng)都在里面了就別管,然后新加進(jìn)來的也要再找,這里C是指向A已經(jīng)在里面了,所以最后的答案就是 { A , C , D } \{A,C,D\} {A,C,D}
2.為上述函數(shù)依賴集F計算一個規(guī)范覆蓋;給出推導(dǎo)的每一步并加以解釋
首先,老問題,規(guī)范覆蓋是個什么東西,其實就是對我們的依賴集進(jìn)行一波簡化。舉個例子A-->C,A-->B,B-->C
,這三個關(guān)系同時出現(xiàn)的前提下,你會發(fā)現(xiàn)A-->C
這句話毫無意義;再舉個例子AB-->C,A-->C
里面這個AB-->C
也同樣是多余的,這些多余的內(nèi)容我們就可以直接刪掉
這題答案就是這樣的
答案把依賴寫的方方正正的很好看,但是實際考試的時候?qū)憘€集合的大括號然后全部往里一丟也是可以的
3.列出R的候選鍵
候選鍵總不用解釋了吧,就是你這個ABCD最少要確定幾個元素或組能夠確定一個元組的所有內(nèi)容
那怎么寫呢,我們就從小往大試,先看ABCD只選一個能不能確定元組,發(fā)現(xiàn)都不行就再試兩個的,發(fā)現(xiàn)BD能確定,那就不要再往更大的找了,答案就是BD
4.使用原始的函數(shù)依賴集,給出僅進(jìn)行一次BCNF分解的R的分解
對于函數(shù)依賴 A → C,A 不是候選鍵,這就意味著存在以非候選鍵作為決定因素的函數(shù)依賴,不符合 BCNF 要求,所以需要基于此進(jìn)行分解。那就把AC分成一組,另外一組現(xiàn)在是BD,但是他們沒有直接的關(guān)系,我們再加一個A進(jìn)去他們就滿足BCNF了,所以就可以將ABCD分解為AC和ABD。
5.基于規(guī)范覆蓋給出R的3NF分解
BCNF我們選擇題遇到了,但是3NF還是第一次遇到,所以先看定義
對于 F c = { A C , C A , B A , D A } F_c=\{ A C, C A, B A, D A\} Fc?={AC,CA,BA,DA},我們這樣考慮
- 對于 A → C A\rightarrow C A→C和 C → A C\rightarrow A C→A:
- 這兩個函數(shù)依賴表明 A A A和 C C C之間是相互決定的關(guān)系。所以將它們組合成一個關(guān)系模式 A C AC AC,在這個關(guān)系模式中, A A A和 C C C都是主屬性,因為它們都能相互決定對方,不存在非主屬性對候選鍵(在這里 A A A和 C C C都可以看作候選鍵)的傳遞函數(shù)依賴,滿足3NF。
- 對于 B → A B\rightarrow A B→A:
- 根據(jù)這個函數(shù)依賴,創(chuàng)建關(guān)系模式 B A BA BA。在這個關(guān)系模式中, B B B是決定因素, A A A是被決定因素。 B B B可以看作主屬性, A A A在這里是非主屬性,但不存在通過其他非主屬性來間接決定 A A A的情況,所以滿足3NF。
- 對于 D → A D\rightarrow A D→A:
- 同理,由這個函數(shù)依賴得到關(guān)系模式 D A DA DA。 D D D是主屬性, A A A是非主屬性,不存在傳遞函數(shù)依賴,滿足3NF。
- 添加 B D BD BD:
- 回顧候選鍵相關(guān)知識,為了確保不丟失候選鍵相關(guān)的信息(雖然在題目描述中沒有詳細(xì)提及如何確定需要添加 B D BD BD,但一般是為了完整地通過候選鍵來關(guān)聯(lián)各個關(guān)系模式),添加關(guān)系模式 B D BD BD。在這個關(guān)系模式中, B B B和 D D D可以看作主屬性,不存在非主屬性對候選鍵的傳遞函數(shù)依賴,滿足3NF。而且通過 B D BD BD與其他關(guān)系模式(如 B A BA BA和 D A DA DA)的關(guān)聯(lián),可以更好地保證數(shù)據(jù)的完整性和一致性。
Question 5 事務(wù)管理
有以下兩個事務(wù)
T1: read(A)read(B)If A=1 then B:=B*2;write(B)
T2: read(B)read(A)If B=1 then A:=A*2;write(A)
設(shè)一致性要求為 A = 1 或 B = 1 A = 1 或 B = 1 A=1或B=1,初始值為 A = B = 1 A = B = 1 A=B=1。
1.證明涉及這兩個事務(wù)的每一個串行執(zhí)行都能保持?jǐn)?shù)據(jù)庫的一致性,并計算A和B的最終結(jié)果
按照慣例,先查定義
那也就是說兩個輪流進(jìn)行嗎,簡單盤一下不難知道如果T1先進(jìn)行的話那最后A=1,B=2
,反之是A=2,B=1
,都是滿足一致性要求的
2.向事務(wù)T1和T2添加加鎖和解鎖指令,使它們遵循兩階段鎖協(xié)議。這些事務(wù)的執(zhí)行會導(dǎo)致死鎖嗎?
上鎖解鎖其實就是用前用后加一行代碼而已
T1加鎖解鎖就是這樣
lock-S(A)
read(A)
lock-X(B)
read(B)
if A = 1
then B := B*2
write(B)
unlock(A)
unlock(B)
T2是這樣的
lock-S(B)
read(B)
lock-X(A)
read(A)
if B = 1
then A := A *2
write(A)
unlock(B)
unlock(A)
都這么問了肯定是會出現(xiàn)死鎖的,萬一兩個一起運行,T1把B鎖了,然后T2想讀就等著T1給他解鎖,大概就像這樣
3.展示T1和T2的一個并發(fā)執(zhí)行,產(chǎn)生一個不可串行化的調(diào)度
簡單來說就是如果兩個同時執(zhí)行,在一個特定的情況下
B在更新之后還沒有寫會數(shù)據(jù)庫,所以在T2里面B還是1,就導(dǎo)致最后A和B都變成2了,就破壞了一致性
4.解釋術(shù)語串行調(diào)度和可串行化調(diào)度之間的區(qū)別
一個其中所有屬于單個事務(wù)的指令都連續(xù)出現(xiàn)的調(diào)度被稱為串行調(diào)度。可串行化調(diào)度是一種并發(fā)調(diào)度,它具有一個較弱的限制,即它應(yīng)該與某個串行調(diào)度等價。
具體的看定義
2020年
Question 1 選擇題
1.數(shù)據(jù)庫系統(tǒng)是________。
選B.等同于DBMS和被管理的數(shù)據(jù)庫。
2.在特定時刻存儲在數(shù)據(jù)庫中的信息集合被稱為________。
第一章最前面就有的概念,選A。
3.________是商業(yè)數(shù)據(jù)庫系統(tǒng)中使用的非過程性語言。
上張試卷有原題,選C。
4.關(guān)于表的鍵的數(shù)量,以下哪項是正確的?
上張卷子科普過了,選B。
5.在以下術(shù)語中,________是正確的。
整本書最前面四個定義就是他們了
所以選A。
6.在數(shù)據(jù)庫系統(tǒng)中使用函數(shù)和過程有利于________。
選D,全都有
- 模塊化:函數(shù)和過程可將復(fù)雜業(yè)務(wù)邏輯分解為獨立模塊,便于管理、理解、維護(hù)與復(fù)用。
- 性能:能減少代碼重復(fù)執(zhí)行,借助系統(tǒng)優(yōu)化提升執(zhí)行效率,節(jié)省資源。
- 安全性:可限制訪問權(quán)限,內(nèi)部進(jìn)行數(shù)據(jù)驗證與權(quán)限檢查,保障數(shù)據(jù)安全與完整。
7.關(guān)于視圖,以下哪項陳述不正確?
視圖雖然是虛擬關(guān)系,但它并不是一個沒有記錄的空表,選C。
8.________不是E-R模型中的三個基本概念之一。
上定義
四個選項只有模式倆字沒在這個定義里出現(xiàn)過,所以選D。
9.以下哪項陳述是錯誤的?
- A.在函數(shù)依賴?yán)碚撝?#xff0c;最嚴(yán)格的范式是BCNF(巴斯 - 科德范式),而不是4NF(第四范式)。4NF主要是處理多值依賴的問題,BCNF則是在函數(shù)依賴的基礎(chǔ)上對關(guān)系模式進(jìn)行更嚴(yán)格的約束,要求關(guān)系模式中每一個函數(shù)依賴的決定因素都包含候選鍵,選A。
- B.3NF(第三范式)是在1NF(第一范式)的基礎(chǔ)上進(jìn)一步滿足一定條件的范式,所以滿足3NF的關(guān)系一定滿足1NF。
- C.如果一個關(guān)系滿足4NF,那么它必然滿足3NF,因為4NF是比3NF更高級的范式,對關(guān)系模式的要求更嚴(yán)格,滿足更嚴(yán)格要求的關(guān)系自然也滿足相對寬松的要求。
- D.BCNF比3NF更嚴(yán)格,如前面所說,BCNF要求函數(shù)依賴的決定因素都包含候選鍵,而3NF允許存在主屬性對候選鍵的傳遞依賴(但不允許非主屬性對候選鍵的傳遞依賴)。
10._______不是事務(wù)的屬性。
之前丟過的圖再丟一遍,很明顯選B,剩下三個明顯都是好詞兒嘛。
11.如果事務(wù)T已經(jīng)獲得了數(shù)據(jù)項A的共享鎖,那么 T 可以_____。
共享鎖的特點就是只讀不寫,選A。想讀寫的話你得用排他鎖(Exclusive Lock),給了一個事務(wù)權(quán)限別的就都不能訪問了,這么設(shè)計是為了保證一致性。還記得上張試卷的Question 5嗎?lock-S(A)
就是給數(shù)據(jù)項A加共享鎖,lock-X(B)
就是給B加排他鎖。
12.在從E-R模型映射到關(guān)系模型時,一個關(guān)系可以被映射為______。
還記得上張試卷上讓我們畫的E-R圖嗎,當(dāng)時我們有的關(guān)系是通過關(guān)聯(lián)的兩個屬性集里面的同名屬性連接,也就是標(biāo)下劃線,反映在數(shù)據(jù)庫上就是一列;也有那個出售價格我們單開了一個表,記錄價格和書籍以及書店的ID,這就是用一個表存。所以這一題選D,兩種存法都可以。
13.在數(shù)據(jù)庫物理設(shè)計階段,必須給出______。
直接上定義,選B。
14.在 SQL 中,以下哪個謂詞可以在 where 子句中用于測試 “amount” 是否為空值?
上張試卷已經(jīng)詳細(xì)介紹過空值了,選B。
15.SQL 語句 “Select count (*) From employee left outer join works” 在以下表上運行,那么查詢的輸出是______?
SELECT count(*)
是用于統(tǒng)計結(jié)果集中的行數(shù)。FROM employee left outer join works
表示對employee
表和works
表進(jìn)行左外連接。左外連接會返回左表(這里是employee
表)中的所有行,以及右表(works
表)中與左表連接條件匹配的行,如果右表中沒有匹配的行,則用NULL
填充。
在給定的示例中,employee
表有 4 行數(shù)據(jù),左外連接后結(jié)果集的行數(shù)仍然是 4 行(即使 works
表中可能沒有與 employee
表中某些行完全匹配的數(shù)據(jù),但左外連接會保證 employee
表的所有行都在結(jié)果集中)。
所以,查詢的輸出是 4,答案選 C。
16.表EMP中插入了多少行?
INSERT INTO EMP(ID, Age) VALUES ('001',25);
INSERT INTO EMP(ID, Age) VALUES (‘002’,35);
INSERT INTO EMP(ID, Age) VALUES (‘003’,15);
INSERT INTO EMP VALUES (‘004’, 40);
COMMIT;
注意看題目的要求,age必須大于18小于60,所以第三條就沒法成功插入,然后第四條沒有指定字段名所以也會插入失敗,選C。
17.在以下關(guān)于函數(shù)依賴的規(guī)則中,________是正確的。
- A.僅根據(jù)
X ∩ Y = ?
不能得出X → Y
的函數(shù)依賴關(guān)系。 - B.已知
X → Y
,那么WX → WY
(根據(jù)增廣律),又因為WY → Z
,所以可以由傳遞律推出WX → Z
,選B。 - C.
XY → Z
不能直接推出X → Z
和Y → Z
。 - D.
X ? Y
也不能得出X → Y
的函數(shù)依賴關(guān)系。
18.設(shè)A、B、C和D為屬性,在以下關(guān)系代數(shù)表達(dá)式中,________不是一個關(guān)系。
× \times ×是笛卡爾積的符號,所以連接的必須是兩個關(guān)系,A選項拿這玩意兒連接屬性肯定是語法錯誤,選A就行。
19.關(guān)于觸發(fā)器,以下哪句話是錯誤的?
選D,書上沒翻到滾去問老師了。
20.如果實體集A和B之間存在一對多關(guān)系,那么______。
在實體集A和B之間存在一對多關(guān)系時,意味著對于B中的一個實體,在A中可以有多個與之相關(guān)聯(lián)的實體;而對于A中的一個實體,在B中只有一個與之相關(guān)聯(lián)的實體。
從函數(shù)依賴的角度來看,由于B中的一個主鍵值能唯一確定A中的主鍵值(因為B中的一個實體對應(yīng)A中的多個實體,所以可以根據(jù)B的主鍵找到A中與之相關(guān)的主鍵),即存在從B的主鍵到A的主鍵的函數(shù)依賴,也就是PK(B) → PK(A)。
而選項B中說從A的主鍵到B的主鍵的函數(shù)依賴是不正確的,因為A中的一個主鍵值可能對應(yīng)B中的多個主鍵值,不滿足函數(shù)依賴的唯一性要求。
所以答案是A。
Question 2 寫關(guān)系代數(shù)表達(dá)式和SQL語句
給定數(shù)據(jù)庫
Teacher(TId, TName, office, age)
Equipment(EId, Ename, serial_number, price)
Own(TId, EId, date)
1.用關(guān)系代數(shù)表達(dá)式查詢沒有任何設(shè)備的老師的編號
非常人性化的是我們的Own表里面就存了老師的Id,所以直接選取Teacher內(nèi)的所有老師Id,把出現(xiàn)在Own表內(nèi)過的Id剪掉就可以了 π T I d ( T e a c h e r ) ? π T I d ( O w n ) \pi_{TId}(Teacher)-\pi_{TId}(Own) πTId?(Teacher)?πTId?(Own)
2.用關(guān)系代數(shù)表達(dá)式和SQL語句查詢擁有價格低于1000的設(shè)備的老師的的名字
設(shè)備的價格,老師的名字和擁有情況分屬三個表,那又要全部先連接一下子然后再查詢了
關(guān)系代數(shù)表達(dá)式
π T N a m e ( σ p r i c e < 1000 ( T e a c h e r ? E q u i p m e n t ? O w n ) ) \pi_{TName}(\sigma_{price<1000}(Teacher?Equipment?Own)) πTName?(σprice<1000?(Teacher?Equipment?Own))
SQL語句
select TName
from Teacher natural join Own natural join Equipment
where price<1000
3.用關(guān)系代數(shù)表達(dá)式和SQL語句查詢擁有價格最高的設(shè)備的教師姓名
關(guān)系代數(shù)表達(dá)式
π n a m e ( T e a c h e r ? O w n ? ( E q u i p m e n t ? p r i c e = max ? ( p r i c e ) ( E q u i p m e n t ) ) ) \pi_{name}(Teacher\bowtie Own\bowtie(Equipment\bowtie_{price=\max(price)}(Equipment))) πname?(Teacher?Own?(Equipment?price=max(price)?(Equipment)))先看里面這個 E q u i p m e n t ? p r i c e = max ? ( p r i c e ) ( E q u i p m e n t ) Equipment\bowtie_{price=\max(price)}(Equipment) Equipment?price=max(price)?(Equipment),這個操作得到的是一個集合,只包括價格=最貴設(shè)備的設(shè)備,再拿這個表和Teacher以及Own自然連接,后面的操作就很明了了。
SQL語句
select TName
from Teacher
where TId in (select TIdfrom Ownwhere EId in (select EIdfrom Equipmentwhere price = (select max(price) from Equipment))
);
4.用SQL語句查詢每位教師的姓名以及所擁有設(shè)備的總價
主要的點就是通過這個Group by
依據(jù)其中一個元素分組,還有就是sum
求和
select TName, sum_price
from teacher natural join (Select TId, sum(price) as sum_priceFrom Own natural join EquipmentGroup by TId
);
5.用SQL語句對所有價格高于10000的設(shè)備進(jìn)行10%的貶值
最基礎(chǔ)的更新數(shù)據(jù)的命令
Update Equipment
Set price=price*0.9
Where price>10000;
Question 3 畫E-R圖以及寫關(guān)系模式
一家醫(yī)院具有如編號、名稱、位置、等級、容量等屬性。一家醫(yī)院有許多用于病人的病房,一個病房可以用房間編號、建筑物、病床數(shù)量等屬性來描述。一位醫(yī)生可以用編號、姓名、年齡、專業(yè)和職稱來描述。一位病人具有如編號、姓名、年齡、性別、地址等屬性。上述對象必須滿足一些約束條件:每位醫(yī)生可以失業(yè)或受雇于一家醫(yī)院。如果一位醫(yī)生受雇,其薪水需要記錄在數(shù)據(jù)庫中。一位病人可以去多家醫(yī)院。住院病人是住在某個病房并由住院醫(yī)生(住院醫(yī)生是醫(yī)生的一種職稱)管理的病人。一個病房只屬于一家醫(yī)院,并且每家醫(yī)院配備多個病房。
1.繪制E-R圖表示上述模式
畫了半天的圖被我不小心刪了,還是丟標(biāo)答吧
2.將E-R圖轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫模式,并指出主鍵和外鍵
一如既往地,我們要額外加一些連接用的鍵值屬性
Hospital(ID, name, location, rank, capacity ) primary key: ID
Ward(roomID, building, HospitalID, BedNumber) primary key: roomID, building, HospitalID foreign key: HospitalID
Doctor(id, name, specialty, title, HospitalID, salary) primary key: ID foreign key: HospitalID
Inpatient(patientID, DoctorID, roomID, building, HospitalID, InDate, OutDate) primary key: patientID, DoctorID, roomID, building, HospitalID foreign key: patientID from patient(ID), DoctorID from doctor(id), roomID, building, HospitalID from ward
3.給出一個例子說明外鍵的作用
以病房關(guān)系Ward
中的HospitalID
外鍵為例。假設(shè)在Ward
表中有一條記錄(101, A 樓, 1, 20)
,其中HospitalID
為 1。這就表示這個病房屬于Hospital
表中ID
為 1 的醫(yī)院。如果在插入或更新這條記錄時,HospitalID
的值在Hospital
表中不存在,那么數(shù)據(jù)庫系統(tǒng)會根據(jù)外鍵約束拒絕這個操作,從而保證了數(shù)據(jù)的一致性,即病房一定是屬于某個已存在的醫(yī)院,不會出現(xiàn)孤立的病房記錄。
Question 4 關(guān)系模式的操作
一整道大題都和上一張試卷的完全一樣,跳過
Question 5 事務(wù)管理
假設(shè)使用即時數(shù)據(jù)庫修改方法和檢查點技術(shù)。下圖描繪了并發(fā)事務(wù)、檢查點時間和系統(tǒng)故障時間。
1.根據(jù)上圖寫下日志目錄。
記錄開始結(jié)束和檢查點即可
<T1,start>
<T2 start>
<T1 commit>
<T3 start>
<checkpoint>
<T4 start>
<T5 start>
<T4 commit>
2.說明哪些事務(wù)需要進(jìn)行撤銷(undo)操作,哪些事務(wù)需要進(jìn)行重做(redo)操作,并解釋原因。
事務(wù) T3 和 T5 需要撤銷,因為這兩個事務(wù)已開始但尚未提交。
事務(wù) T2 和 T4 需要重做,因為它們在檢查點(Tc)之后且在系統(tǒng)故障(Tf)之前已提交,但結(jié)果可能尚未寫入數(shù)據(jù)庫。
3.使用檢查點技術(shù)的優(yōu)點。
檢查點技術(shù)的優(yōu)點在于,在系統(tǒng)恢復(fù)時,不需要從最早的事務(wù)開始進(jìn)行重做(redo)和撤銷(undo)操作。所有在檢查點之前已經(jīng)提交的事務(wù),其對數(shù)據(jù)庫的修改已經(jīng)被保證是持久化的,不需要再次進(jìn)行處理。在進(jìn)行恢復(fù)操作時,可以從檢查點之后開始處理那些未完成的事務(wù)(如本題中的 T3 和 T5 需要撤銷,因為它們在系統(tǒng)故障時還未提交)以及重新執(zhí)行在檢查點之后提交但可能結(jié)果尚未寫入數(shù)據(jù)庫的事務(wù)(如本題中的 T2 和 T4 需要重做)。這樣可以大大縮短恢復(fù)過程所需的時間和資源消耗,提高系統(tǒng)的可用性和恢復(fù)效率。
4.繪制事務(wù)的狀態(tài)圖。
2021年
Question 1 選擇題
1.下列那句是錯誤的?
選B,一列怎么可能有多個名稱呢?
2.哪項可以擁有屬性?
實體集有描述其特征的屬性,關(guān)系集在某些情況下也可以有屬性來描述關(guān)系的一些特性,選C。
3.如果實體集 “經(jīng)理(manager)” 和 “項目(project)” 之間的 “負(fù)責(zé)(in_charge_of)” 關(guān)系集的主鍵是 {project_id},那么 “in_charge_of” 的映射基數(shù)是什么?
題目沒說那就不知道,除非明確說了一個經(jīng)理只管一個項目或者一個項目只有一個經(jīng)理,選D。
4.當(dāng)一個實體轉(zhuǎn)換為關(guān)系模式時,_____屬性會被放置在一個新的關(guān)系模式中,而不是該實體的關(guān)系模式中。
多值屬性在轉(zhuǎn)換時通常會單獨處理,放在新的關(guān)系模式中,而復(fù)合屬性、派生屬性和簡單屬性一般直接放在實體對應(yīng)的關(guān)系模式中,所以選B。
5._____將具有相同特征的實體集組合成一個更高層次的實體集。
上定義
所以選B概化。
6.SQL語言使用______語句從表中刪除一列。
在 SQL 中,使用 Alter 語句的相關(guān)語法來刪除表中的列,Delete 用于刪除行,Drop 用于刪除表或其他數(shù)據(jù)庫對象,Update 用于更新數(shù)據(jù),選A。
7.在 SQL 中,______是與 “IN” 等價的運算符。
前面有解釋,選D。
8.______會從 Stud 表中刪除在 SC 表中有課程的行?
和上題差不多,選C。
9.下列語句中錯誤的是?
在關(guān)系數(shù)據(jù)庫中,一列中的值必須來自相同的域,而不是不同的域,所以選D。A 選項,投影運算符∏在功能上與 SQL 中的 “Select” 子句有相似之處,是正確的;B 選項,關(guān)系中列的順序確實是可以改變的,不影響關(guān)系的本質(zhì),是正確的;C 選項,一個視圖可以在定義另一個視圖的表達(dá)式中使用,是正確的。
10.____確保一旦一個事務(wù)已提交,即使發(fā)生系統(tǒng)故障,該事務(wù)的更新也不會丟失。
再丟這個圖,這次加個英文
所以選Duration持久性也就是D。
11.調(diào)度必須是_______,以確保如果事務(wù) Ti 看到事務(wù) Tj 的影響,而 Tj 隨后中止,那么 Ti 也會中止。
可恢復(fù)的調(diào)度才能保證在這種情況下 Ti 也會中止,無級聯(lián)調(diào)度主要是防止級聯(lián)回滾;可串行化調(diào)度強(qiáng)調(diào)與串行執(zhí)行結(jié)果的等價性;沖突可串行化調(diào)度是可串行化調(diào)度的一種更嚴(yán)格的形式,選A。
12._____僅在事務(wù)結(jié)束時釋放排它鎖,不要求共享鎖僅在事務(wù)結(jié)束時釋放。
先看課本
沒說共享鎖相關(guān)的事情啊,再去查wiki,wiki這么說
所以選C。
13.關(guān)于兩段鎖協(xié)議確保無死鎖的說法哪個是正確的?
上面課本上說了
所以選B。
14.當(dāng)________時,一個事務(wù)被認(rèn)為已提交。
當(dāng)事務(wù)的最后一條日志記錄已輸出到穩(wěn)定存儲時,事務(wù)被認(rèn)為已提交,因為這樣能保證即使系統(tǒng)出現(xiàn)故障,提交的信息也不會丟失。所有更新記錄在日志中、所有寫操作完成都不能完全確定事務(wù)已成功提交,所有更新回滾則是事務(wù)失敗的情況,三短一長選最長嘛答案選A。
15.如果應(yīng)用程序不依賴于數(shù)據(jù)庫的物理模式,并且在物理模式更改時不需要重寫,那么它們被稱為具有______
顧名思義,不依賴域物理模式那就是具有物理獨立性唄,選C。
16.數(shù)據(jù)字典是______
數(shù)據(jù)字典是包含數(shù)據(jù)庫元數(shù)據(jù)的特殊類型的表,它不是用于存儲用戶數(shù)據(jù)或 DML 輸出的,雖然由 DBA 管理但不是簡單的包含元數(shù)據(jù)且可更新,它有特定的結(jié)構(gòu)和用途,選A。
17.授權(quán)語句:‘grant select on department to Amit, Satoshi;’成功執(zhí)行后,_______。
語句授予了 Amit 和 Satoshi 對 department 表的查詢權(quán)限,所以他們可以讀取表中的所有記錄,不能進(jìn)行更新、刪除或修改模式等操作,所以選D。
18.插入語句 “insert into instructor (id, name, dept_name, salary) values (‘12123’,’Kate’,’ ’, 32767)” 會向表 takes 中插入_____。
根據(jù)觸發(fā)器的定義,當(dāng)插入的 dept_name 為空時,會將其設(shè)置為 null,所以插入的值會變?yōu)椤?2123’,’Kate’, null, 32767,所以選B。
19.以下哪個語句是錯誤的?
如果一個關(guān)系在 3NF 中,不一定在 BCNF 中,BCNF 是比 3NF 更嚴(yán)格的范式,A 選項關(guān)系模式 R 滿足所有屬性域為原子則在 1NF 是正確的;B 選項 3NF 和 BCNF 的關(guān)系都在 1NF 是正確的;C 選項在 BCNF 中的關(guān)系一定在 3NF 是正確的,所以選D。
20.在以下關(guān)于函數(shù)依賴的規(guī)則中,______是正確的。
跟上面的推法一致,選C。
Question 2 寫關(guān)系代數(shù)表達(dá)式和SQL語句
已知下面這樣一個數(shù)據(jù)庫
Person(driver_id, name, address);
Car(license_plate, model, year);
Accident(report_no, year, location);
Owns(driver_id, license_plate);
Participated(report_no, license_plate, driver_id, damage_amount);
1.寫關(guān)系代數(shù)表達(dá)式和SQL語句查詢所有擁有2010年或之后生產(chǎn)的汽車且居住在“New York”的客戶的姓名。
關(guān)系代數(shù)表達(dá)式
π n a m e ( σ y e a r > = 2010 , a d d r e s s = ′ N e w Y o r k ′ ( P e r s o n ? O w n s ? C a r ) ) \pi_name(\sigma_{year>=2010,address='New York'}(Person?Owns?Car)) πn?ame(σyear>=2010,address=′NewYork′?(Person?Owns?Car))
SQL語句
SELECT name
WHERE year>=2010 and address='New York'
FROM Person natural join Own natural join Car;
2.寫關(guān)系代數(shù)表達(dá)式和SQL語句查詢名為“Smith”的司機(jī)所擁有的汽車的車牌。
關(guān)系代數(shù)表達(dá)式
π l i c e n s e p l a t e ( σ n a m e = ′ S m i t h ′ ( P e r s o n ? O w n s ) ) \pi_{license_plate}(\sigma_{name='Smith'}(Person?Owns)) πlicensep?late?(σname=′Smith′?(Person?Owns))
SQL語句
SELECT license_plate
WHERE name='Smith'
FROM Person natural join Owns;
3.寫關(guān)系代數(shù)表達(dá)式和SQL語句查詢2021年從未發(fā)生過任何事故的這些人員的姓名和司機(jī)編號。
先取所有的司機(jī),再減去2021年出過事故的司機(jī)的信息。
關(guān)系代數(shù)表達(dá)式
π n a m e , d r i v e r i d ( P e r s o n ) ? π n a m e , d r i v e r i d ( σ y e a r = 2021 ( P e r s o n ? P a r t i c i p a t e d ? A c c i d e n t ) ) \pi_{name,driver_id}(Person)-\pi_{name,driver_id}(\sigma_{year=2021}(Person?Participated?Accident)) πname,driveri?d?(Person)?πname,driveri?d?(σyear=2021?(Person?Participated?Accident))
SQL語句
SELECT name,driver_id
FROM Person
WHERE driver_id not in(SELECT driver_idWHERE year=2021FROM Participated natural join Accident);
4.用SQL語句找出2021年事故發(fā)生次數(shù)最多的地點
Select location
From accident
Where year=2021
Group by location
Having count(report_no) >=all
(select count(report_no) from accident group by location);
5.用SQL語句查詢2021年至少發(fā)生兩次事故的司機(jī)編號和人員姓名
Select driver_id, name
From Person as S
Where not unique(select report_no
from Accident as A natural join Participated as P
where P.driver_id=S.driver_id and A.year=2021);
6.用SQL語句將2021年在“Wushan”發(fā)生的事故中車牌為“SCAU888”的汽車的損壞金額增加10%
Update Participated
Set damage_amount=damage_amount*1.1
Where license_plate=”SCAU888” and report_no in
(select report_no from Accident where year=2021 and location=”Wushan”);
7.用SQL語句查詢擁有2015年之前生產(chǎn)的汽車且地址中包含“New”的司機(jī)的姓名和地址
主要關(guān)注模糊匹配用%
代表任意字符串而且不能用=
要用like
SELECT name,address
WHERE year<2015 and address like '%New%'
FROM Person natural join Owns natural join Car;
8.用SQL語句將所有在“Beijing”發(fā)生的事故的損壞金額更新為原來的兩倍,但如果損壞金額超過5000元,則只更新為5000元
主要關(guān)注條件判斷的語法
UPDATE Participated
SET damage_amount = CASE WHEN damage_amount * 2 <= 5000 THEN damage_amount * 2ELSE 5000END
WHERE license_plate = 'SCAU888' AND report_no IN (SELECT report_noFROM AccidentWHERE location = 'Beijing' AND year = 2021
);
Question 3 畫E-R圖以及寫關(guān)系模式
一篇論文具有屬性:ID(編號)和標(biāo)題(title)。一本期刊具有屬性:ID(編號)、名稱(name)、影響因子(factor)和類別(category)。一位作者具有屬性:ID(編號)、名字(first name)、姓氏(last name)、頭銜(title)和電子郵件(email)。一項資助具有屬性:ID(編號)、標(biāo)題(title)、機(jī)構(gòu)(agency)和年份(year)。一篇論文可以由多位作者撰寫,一篇論文必須至少有一位作者。一篇論文只能在一本期刊上發(fā)表。如果一篇論文被發(fā)表,那么像年份(year)、卷(volume)、期(issue)、頁碼(page)等出版信息必須記錄在數(shù)據(jù)庫中。一位作者可以得到多項資助,而一項資助必須恰好支持一位作者。
1.繪制E-R圖來說明上述數(shù)據(jù)庫要求
之前好像忘記丟了,丟一個圖例在這里
2.將你的E-R圖轉(zhuǎn)換為關(guān)系數(shù)據(jù)庫模式,并指出主鍵和外鍵。
Journal (id, name, factor, category) primary key:id
Paper (id, title) primary key:id
Publish (J_id, P_id, volume, issue, page) primary key:J_id,foreign key: J_id reference Journal:id, P_id reference paper:id
Author (id, first_name, last_name, title, email) primary key:id
Funding (id, title, agency, year, sup_author_id) primary key:id foreign key: sup_author_id reference author:id,
write(P_id, Au_id) primary key:P_id, Au_id, foreign key: P_id reference paper:id, Au_id reference author:id
Question 4 關(guān)系模式的操作
設(shè) R = A B C D E F R = ABCDEF R=ABCDEF 是一個關(guān)系,函數(shù)依賴集 F = { A B → C D , D → C , D E F → A B , D E → B , A C → D C } F = \{AB \to CD, D \to C, DEF \to AB, DE \to B, AC \to DC\} F={AB→CD,D→C,DEF→AB,DE→B,AC→DC} 在 R R R 上成立。
1.列出關(guān)系R的所有候選鍵
候選鍵就是要找盡可能少的字母,使得這些字母根據(jù)上面給定的函數(shù)依賴能推出剩下的所有字母
這一題的所有候選鍵就是DEF, ABEF, ACEF
2.函數(shù)依賴 A C → B AC \to B AC→B 在 R R R 上是否成立,解釋原因。
就看嘛,AC能推出D,其他的字母都沒法通過上面的函數(shù)依賴推出來,所以這個B也不成立
說的更正式一點的話就說 { A C } + \{AC\}^{+} {AC}+計算出來為 { A C D } \{ACD\} {ACD}, B B B不在這個集合內(nèi)所以不成立。
3.給出僅進(jìn)行一次BCNF分解的 R R R的分解。
AB→CD
是導(dǎo)致違反BCNF的一個函數(shù)依賴,因為它不是平凡函數(shù)依賴,而且AB
并非候選鍵。因此,關(guān)系R
可分解為{R1(ABCD),R2(ABEF)}這兩個關(guān)系。
4.給出關(guān)系R
的第三范式(3NF)分解,并列出計算其正則覆蓋的主要步驟
F
= {AB→CD
,D→C
,DEF→AB
,DE→B
,AC→DC
}
在AB→CD
中,C
是冗余的,因此F
等價于{AB→D
,D→C
,DEF→AB
,DE→B
,AC→DC
}。
在DEF→AB
中,鑒于DE→B
,B
是冗余的,所以F
等價于{AB→D
,D→C
,DEF→A
,DE→B
,AC→DC
}。
在AC→DC
中,由于D→C
,C
是冗余的,于是F
等價于{AB→D
,D→C
,DEF→A
,DE→B
,AC→D
}。
那么一個正則覆蓋可以是F_C
= {AB→D
,D→C
,DEF→A
,DE→B
,AC→D
}。
然后關(guān)系R
的第三范式分解可以是:
{ABD
,ACD
,BDE
,ADEF
}
Question 5 事務(wù)管理
Part 1
考慮如下具有三個事務(wù)( T 0 T_0 T0?、 T 1 T_1 T1?、 T 2 T_2 T2?)的調(diào)度,這些事務(wù)在數(shù)據(jù)庫中對四個數(shù)據(jù)項(A、B、C、D)進(jìn)行操作,初始值分別為:A = 1000,B = 2000,C = 600,D = 200。
事務(wù) | 操作 |
---|---|
T 0 T_0 T0? | Read(A); Read(B); Read(C) |
T 1 T_1 T1? | Read(B); Read(C); C : = C ? 100 C := C - 100 C:=C?100; D : = D + 100 D := D + 100 D:=D+100 |
T 2 T_2 T2? | A : = A ? 50 A := A - 50 A:=A?50; B : = B ? 500 B := B - 500 B:=B?500; Write(C) |
T 3 T_3 T3? | B : = B + 50 B := B + 50 B:=B+50; C : = C + 500 C := C + 500 C:=C+500; Write(A); Write(B); Write(B); Write(C) |
1.解釋串行調(diào)度和可串行化調(diào)度之間的區(qū)別
2019年最后一題
2.給出一種并發(fā)執(zhí)行產(chǎn)生可串行化調(diào)度的場景,且事務(wù)提交順序不同于串行化順序
Part 2
現(xiàn)在假設(shè)在上述調(diào)度執(zhí)行過程中,系統(tǒng)在執(zhí)行完事務(wù) T 1 T_1 T1?的操作后崩潰了,并且在崩潰前剛剛完成了一個檢查點(checkpoint)操作,同時假設(shè)在崩潰前日志(log)包含了以下記錄:
事務(wù) | 操作 |
---|---|
T 0 T_0 T0? | start |
T 0 T_0 T0? | Read(A) |
T 0 T_0 T0? | Read(B) |
T 0 T_0 T0? | Read(C ) |
T 1 T_1 T1? | start |
T 1 T_1 T1? | Read(B) |
T 1 T_1 T1? | Read(C) |
T 1 T_1 T1? | C : = C ? 100 C := C - 100 C:=C?100 |
T 1 T_1 T1? | D : = D + 100 D := D + 100 D:=D+100 |
T 2 T_2 T2? | start |
T 2 T_2 T2? | A : = A ? 50 A := A - 50 A:=A?50 |
T 2 T_2 T2? | B : = B ? 500 B := B - 500 B:=B?500 |
3.解釋檢查點技術(shù)(checkpoint technology)
- 將當(dāng)前駐留在主內(nèi)存中的所有日志記錄輸出到穩(wěn)定存儲中。
- 將所有已修改的緩沖區(qū)塊輸出到磁盤。
- 將形如的日志記錄輸出到穩(wěn)定存儲中,其中L是檢查點時處于活動狀態(tài)的事務(wù)列表。
4.描述在重做階段(Redo Pass)中撤銷列表(Undo List)的變化
在重做階段,撤銷列表最初包含事務(wù)T1和T2;當(dāng)找到T2的提交日志記錄時,將T2從撤銷列表中移除,而當(dāng)找到T3的開始日志記錄時,將T3添加到撤銷列表中。當(dāng)找到事務(wù)T1的中止日志記錄時,將T1從撤銷列表中移除,最終撤銷列表中僅剩下T3。
5.展示在恢復(fù)過程中應(yīng)該添加的日志記錄。
<T3, D,300>
<T3, abort>
6.列出完成恢復(fù)后B、C和D的最終值。
B = 2050,C = 600,D = 300 。