軟件設(shè)計(jì)師考前模擬試題及答案解析九
試題2
閱讀以下某工廠信息管理數(shù)據(jù)庫(kù)的設(shè)計(jì)說(shuō)明,根據(jù)要求回答問(wèn)題1~問(wèn)題4。(15分)
【說(shuō)明】
某工廠有多個(gè)部門(mén),每個(gè)部門(mén)有多位職工,每位職工屬于并且僅屬于一個(gè)部門(mén),每個(gè)部門(mén)有一位負(fù)責(zé)人,每個(gè)辦公室有一部電話。每位職工的月工資大致是:800≤月工資≤4 500元。
軟件開(kāi)發(fā)公司A為該工廠開(kāi)發(fā)的信息管理數(shù)據(jù)庫(kù)的部分關(guān)系模式如下所示。
職工(職工號(hào),姓名,年齡,月工資,部門(mén)號(hào),電話,辦公室)
部門(mén)(部門(mén)號(hào),部門(mén)名,負(fù)責(zé)人代碼,任職時(shí)間)
其中“職工”和“部門(mén)”的關(guān)系示例分別見(jiàn)表8和表9。
表8 “職工”關(guān)系示例表
職 工 號(hào) |
姓 名 |
年 齡 |
月 工 資 |
部 門(mén) 號(hào) |
電 話 |
辦 公 室 |
1001 |
鄭俊華 |
26 |
1000 |
1 |
8001234 |
主樓201 |
1002 |
王平 |
27 |
1100 |
1 |
8001234 |
主樓201 |
2001 |
王曉華 |
38 |
1300 |
2 |
8001235 |
1號(hào)樓302 |
2002 |
李力 |
24 |
800 |
2 |
8001236 |
1號(hào)樓303 |
3001 |
黎運(yùn)軍 |
42 |
1300 |
3 |
8001237 |
主樓202 |
4001 |
李源 |
24 |
800 |
3 |
8001245 |
2號(hào)樓102 |
4002 |
李興民 |
36 |
1200 |
4 |
8001246 |
2號(hào)樓103 |
5001 |
趙欣 |
25 |
0 |
Null |
… |
… |
… |
… |
… |
… |
… |
… |
… |
表9 “部門(mén)”關(guān)系示例表
部 門(mén) 號(hào) |
部 門(mén) 名 |
負(fù)責(zé)人代碼 |
任 職 時(shí) 間 |
1 |
人事處 |
1002 |
2004-8-3 |
2 |
機(jī)關(guān) |
2001 |
2004-8-3 |
3 |
銷(xiāo)售科 |
|
|
4 |
生產(chǎn)科 |
4002 |
2003-6-1 |
5 |
車(chē)間 |
|
|
【問(wèn)題1】(2分)
請(qǐng)使用“關(guān)系模式標(biāo)記規(guī)則”(見(jiàn)本題附錄),給出上述各關(guān)系模式的主鍵和外鍵。
【問(wèn)題1】答案解析:
這是一道要求考生根據(jù)題目給定的關(guān)系模式,以及屬性間的函數(shù)依賴(lài)關(guān)系和給定的關(guān)系實(shí)例來(lái)確定各關(guān)系模式主鍵和外鍵的綜合分析題。本試題的解答思路如下。
(1)由試題中給出的關(guān)鍵信息“某工廠有多個(gè)部門(mén),每個(gè)部門(mén)有多位職工,每位職工屬于并且僅屬于一個(gè)部門(mén),每個(gè)部門(mén)有一位負(fù)責(zé)人,……每位職工的月工資大致是:800≤月工資≤4500元”,可以整理出如表8所示的關(guān)系模式主要屬性、含義及約束。
表10 主要屬性、含義及約束表
屬 性 |
含義及約束 |
職工號(hào) |
唯一標(biāo)識(shí)每個(gè)職工的編號(hào),每個(gè)職工屬于并且僅屬于一個(gè)部門(mén) |
部門(mén)號(hào) |
唯一標(biāo)識(shí)每個(gè)部門(mén)的編號(hào),每個(gè)部門(mén)有一個(gè)負(fù)責(zé)人,且他也是一位職工 |
月工資 |
f 500≤月工資≤5000元 |
(2)設(shè)K為R(U,F(xiàn))中的屬性的組合,若 ,且對(duì)于K的任何一個(gè)真子集 ,都有 不能決定U,則K為R的候選碼(候選關(guān)鍵字)。若有多個(gè)候選碼,則選一個(gè)作為主碼(主鍵)。
(3)部門(mén)關(guān)系模式的主鍵和外鍵。
由題目中給出的關(guān)鍵信息“某工廠有多個(gè)部門(mén),……每個(gè)部門(mén)有一位負(fù)責(zé)人”,并且結(jié)合試題所給出的“部門(mén)”關(guān)系示例(見(jiàn)表9)可知,僅用“部門(mén)號(hào)”作為主鍵,可以唯一區(qū)分部門(mén)關(guān)系中的每一個(gè)元組。同時(shí)考慮到部門(mén)負(fù)責(zé)人應(yīng)該來(lái)自職員,所以“負(fù)責(zé)人代碼”應(yīng)為部門(mén)關(guān)系模式的外鍵。***可得部門(mén)關(guān)系模式的主鍵和外鍵如下。
部門(mén)(部門(mén)號(hào),部門(mén)名,負(fù)責(zé)人代碼,任職時(shí)間)
(4)職工關(guān)系模式的主鍵和外鍵。
由題干中給出的關(guān)鍵信息“每位職工屬于并且僅屬于一個(gè)部門(mén)”可知,僅用“職工號(hào)”作為主鍵,可以唯一區(qū)分職工關(guān)系中的每一個(gè)元組。同時(shí)考慮到“部門(mén)號(hào)”是部門(mén)關(guān)系模式的主鍵,所以它應(yīng)是職工關(guān)系模式的外鍵。***可得職工關(guān)系模式的主鍵和外鍵如下。
職工(職工號(hào),姓名,年齡,月工資,部門(mén)號(hào),電話,辦公室)
【問(wèn)題2】(3分)
對(duì)于表8和表9所示的“職工”和“部門(mén)”關(guān)系,請(qǐng)指出表11中第①、②和③行是否允許插入?請(qǐng)分別用100字以?xún)?nèi)的文字簡(jiǎn)要說(shuō)明理由。
表11 新增“職工”關(guān)系示例表
行 號(hào) |
職 工 號(hào) |
姓 名 |
年 齡 |
月 工 資 |
部 門(mén) 號(hào) |
電 話 |
辦 公 室 |
① |
1001 |
王新軍 |
28 |
1000 |
1 |
8001234 |
主樓201 |
② |
2003 |
李力 |
28 |
1000 |
|
|
|
③ |
5802 |
趙曉嘯 |
36 |
1500 |
6 |
8001568 |
3號(hào)樓503 |
③5802趙曉嘯361500680015683號(hào)樓503
【問(wèn)題2】答案解析:
這是一道要求考生掌握完整性定義的約束性的綜合分析題。本試題的解答思路如下。
(1)用SQL定義關(guān)系模式的一個(gè)非常重要的問(wèn)題是完整性控制。完整性控制應(yīng)具有①定義功能、②檢測(cè)功能和③處理功能等3方面的功能。一旦發(fā)現(xiàn)違背了完整性約束條件,則應(yīng)采取相關(guān)的動(dòng)作來(lái)保證數(shù)據(jù)的完整性。數(shù)據(jù)庫(kù)中最重要的約束是聲明一個(gè)或一組屬性形成關(guān)系的鍵。鍵的約束在SQL的CREATE TABLE命令中聲明。在關(guān)系系統(tǒng)中,最重要的完整性約束條件是:實(shí)體完整性和參照完整性。
(2)實(shí)體完整性定義。在關(guān)系中只能有一個(gè)主鍵。聲明主鍵有以下兩種方法:①將PRIMARY KEY保留字加在屬性類(lèi)型之后;②在屬性列表中引入一個(gè)新元素,該元素包含保留字PRIMARY KEY和用圓括號(hào)括起的,形成該鍵的屬性或?qū)傩越M列表。
(3)參照完整性定義。定義格式如下:
FOREIGN KEY(屬性名) REFERENCES 表名(屬性名)
[ON DELETE CASCADE | SET NULL]
參照完整性是通過(guò)使用保留字“FOREIGN KEY”定義哪些列為外碼;REFERENCES用于指明外鍵對(duì)應(yīng)于哪個(gè)表的主鍵;ON DELETE CASCADE指明刪除被參照關(guān)系的元組時(shí),同時(shí)刪除參照關(guān)系中的元組;SET NULL表示置為空值方式。
(4)由于在職工表的定義中,職工號(hào)主碼是唯一標(biāo)識(shí)每個(gè)元組(記錄)的,而在表11第①行中的職工號(hào)是“1001”,在題目給出的表8“職工”關(guān)系示例表中已經(jīng)存在該職主號(hào)的記錄,為了保證實(shí)體的完整性,該條記錄不能插入。
(5)表11第②行的元組可以插入到表8“職工”關(guān)系表中,盡管部門(mén)號(hào)、電話和辦公室為空,但是它表示該雇員暫時(shí)沒(méi)有分配到某個(gè)部門(mén)。雖然職工表中部門(mén)號(hào)是外鍵,但在定義中也沒(méi)有約束它不能為空。
(6)表11第③行的元組不能插入到表8“職工”關(guān)系表中,部門(mén)號(hào)是外鍵,而在部門(mén)關(guān)系中找不到部門(mén)號(hào)為“6”的元組,違反了參照完整性,所以不能做插入操作。
【問(wèn)題3】(5分)
查詢(xún)每個(gè)部門(mén)中月工資***的“職工號(hào)”的SQL查詢(xún)語(yǔ)句如下。
Select 職工號(hào) from 職工E
where 月工資=(Select Max(月工資)
from職工as M
where M.部門(mén)號(hào)=E.部門(mén)號(hào))
(1)請(qǐng)用30字以?xún)?nèi)文字簡(jiǎn)要說(shuō)明該查詢(xún)語(yǔ)句對(duì)查詢(xún)效率的影響。
(2)對(duì)該查詢(xún)語(yǔ)句進(jìn)行修改,使它既可以完成相同功能,又可以提高查詢(xún)效率。
【問(wèn)題3】答案解析:
這是一道要求考生分析查詢(xún)效率的綜合分析題。通常在涉及相關(guān)查詢(xún)的某些情形中,構(gòu)造臨時(shí)關(guān)系可以提高查詢(xún)效率。
(1)試題中所給出的SQL查詢(xún)語(yǔ)句,對(duì)于外層的職工關(guān)系E中的每一個(gè)元組,都要對(duì)內(nèi)層的整個(gè)職工關(guān)系M進(jìn)行檢索,因此查詢(xún)效率不高。
(2)對(duì)該查詢(xún)語(yǔ)句進(jìn)行修改,使它既可以完成相同功能,又可以提高查詢(xún)效率。
解答思路①
改正后的SQL語(yǔ)句使用了臨時(shí)表。
Select Max(月工資) as ***工資,部門(mén)號(hào) into Temp from職工
Group by部門(mén)號(hào)
Select 職工號(hào) from職工,Temp
where月工資=***工資 and 職工。部門(mén)號(hào)=Temp.部門(mén)號(hào)
解答思路②
Select 職工號(hào) from 職工,(Select Max(月工資) as ***工資,部門(mén)號(hào) Group by 部門(mén)號(hào))
as depMax
where 月工資=***工資 and 職工。部門(mén)號(hào)=depMax.部門(mén)號(hào)
【問(wèn)題4】(2分)
假定分別在“職工”關(guān)系中的“年齡”和“月工資”字段上創(chuàng)建了索引,如下的Select查詢(xún)語(yǔ)句可能不會(huì)促使查詢(xún)優(yōu)化器使用索引,從而降低查詢(xún)效率,請(qǐng)寫(xiě)出既可以完成相同功能又可以提高查詢(xún)效率的SQL語(yǔ)句。
Select 姓名,年齡,月工資 from 職工
where 年齡>45 or 月工資<1000;
【問(wèn)題4】答案解析:
本試題所給出的原Select查詢(xún)語(yǔ)句中使用了條件or,系統(tǒng)在查詢(xún)的時(shí)候?qū)?duì)全表進(jìn)行掃描,不會(huì)促使查詢(xún)優(yōu)化器使用索引,從而降低了查詢(xún)效率。
既可以完成相同功能又可以提高查詢(xún)效率的SQL語(yǔ)句修改如下。
Select 姓名,年齡,月工資 from 職工
where 年齡>45;
union
Select 姓名,年齡,月工資 from 職工
where 年齡 月工資<1000;
【問(wèn)題5】(3分)
該數(shù)據(jù)庫(kù)系統(tǒng)在設(shè)計(jì)時(shí),采用了異構(gòu)數(shù)據(jù)庫(kù)技術(shù)。請(qǐng)給出目前3種通用的異構(gòu)數(shù)據(jù)庫(kù)查詢(xún)技術(shù)。
【問(wèn)題5】答案解析:
這是一道要求考生掌握異構(gòu)數(shù)據(jù)庫(kù)的基本概念題。本題所涉及的知識(shí)點(diǎn)如下。
異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)是相關(guān)的多個(gè)數(shù)據(jù)庫(kù)系統(tǒng)的集合,可以實(shí)現(xiàn)數(shù)據(jù)的共享和透明訪問(wèn),每個(gè)數(shù)據(jù)庫(kù)系統(tǒng)在加入異構(gòu)數(shù)據(jù)庫(kù)系統(tǒng)之前本身就已經(jīng)存在,擁有各自的DMBS。
異構(gòu)數(shù)據(jù)庫(kù)的各個(gè)組成部分具有自身的自治性,實(shí)現(xiàn)數(shù)據(jù)共享的同時(shí),每個(gè)數(shù)據(jù)庫(kù)系統(tǒng)仍保有各自的應(yīng)用特性、完整性控制和安全性控制。目前通用的異構(gòu)數(shù)據(jù)庫(kù)查詢(xún)技術(shù)包括公共數(shù)據(jù)庫(kù)網(wǎng)關(guān)技術(shù)、公共協(xié)議技術(shù)和公共編程接口技術(shù)。
【附】
關(guān)系模式的標(biāo)記規(guī)則如下。
關(guān)系名(屬性名1,屬性名2,…,屬性名n)
其中:①若該屬性?xún)H為主鍵屬性時(shí),則該屬性名下畫(huà)實(shí)下畫(huà)線;
②若該屬性?xún)H為外鍵屬性時(shí),則該屬性名下畫(huà)虛下畫(huà)線;
③若該屬性既是主鍵屬性,又是外鍵屬性時(shí),則在該屬性名下畫(huà)實(shí)下畫(huà)線和虛下畫(huà)線;
④若該屬性既不是主鍵屬性,又不是外鍵屬性時(shí),則在該屬性名下不做標(biāo)記。
【編輯推薦】