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