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