數據庫系統工程師下午試題分析與解答

第12章 數據庫系統工程師下午試題分析與解答(2010年上半年下午試題)來自百度文檔

 

第12章 數據庫系統工程師下午試題分析與解答

 

試題一

閱讀下列說明和圖,回答問題1至問題4,將解答填入答題紙的對應欄內。

[說明]

某大型企業的數據中心爲了集中管理、控制用戶對數據的訪問並支持大量的連接需求,欲構建數據管理中問件,其主要功能如下:

(1)數據管理員可通過中間件進行用戶管理、操作管理和權限管理。用戶管理維護用戶信息,用戶信息(用戶名、密碼)存儲在用戶表中;操作管理維護數據實體的標準操作及其所屬的後端數據庫信息,標準操作和後端數據庫信息存放在操作表中;權限管理維護權限表,該表存儲用戶可執行的操作信息。

(2)中間件驗證前端應用提供的用戶信息。若驗證不通過,返回非法用戶信息;若驗證通過,中間件將等待前端應用提交操作請求。

(3)前端應用提交操作請求後,中間件先對請求進行格式檢查。如果格式不正確,返回格式錯誤信息;如果格式正確,則進行權限驗證(驗證用戶是否有權執行請求的操作),若用戶無權執行該操作,則返回權限不足信息,否則進行連接管理。

(4)連接管理連接相應的後臺數據庫並提交操作。連接管理先檢查是否存在空閒的數據庫連接,如果不存在,新建連接;如果存在,則重用連接。

(5)後端數據庫執行操作並將結果傳給中間件,中間件對收到的操作結果進行處理後,將其返回給前端應用。

現採用結構化方法對系統進行分析與設計,獲得如圖1-1所示的頂層數據流圖和圖1-2所示的0層數據流圖。

[問題1]

使用說明中的詞語,給出圖1-1中的實體E1~E3的名稱。

[問題2]

使用說明中的詞語,給出圖1-2中的數據存儲D1~D3的名稱。

[問題3]

給出圖1-2中加工P的名稱及其輸入、輸出流。

 

名稱

起點

終點

輸入流

 操作結果

 E3

P

輸出流

 處理後的操作結果

P

 E1

除加工P的輸入與輸出流外,圖1-2還缺失了兩條數據流,請給出這兩條數據流的起點和終點。

起點

終點

 D2

權限驗證 

 D3

 權限驗證

注:名稱使用說明中的詞彙,起點和終點均使用圖1-2中的符號或詞彙。

[問題4]

在繪製數據流圖時,需要注意加工的繪製。請給出三種在繪製加工的輸入、輸出時可能出現的錯誤。

只有輸入而無輸出或者黑洞

只有輸出而無輸入或者奇蹟

輸入的數據流無法通過加工產生輸出流或者灰洞

輸入的數據流與輸出的數據流名稱相同

 

試題一分析

本題考查數據流圖(DFD)的應用,是比較傳統的題目,要求考生細心分析題目中所描述的內容。

DFD是一種便於用戶理解、分析系統數據流程的圖形工具,是系統邏輯模型的重要組成部分。

[問題1]

本問題考查頂層DFD。項層DFD一股用來確定系統邊界,將待開發系統看作是一個加工,因此圖中只有唯一的一個加工和一些外部實體,以及這兩者之問的輸入輸出數據流。題目要求根據描述確定圖中的外部實體。分析題目中的描述,並結合已經在頂層數據流圖中給出的數據流進行分析。題目中有信息描述:數據管理員可通過中間件進行用戶管理、操作管理和權限管理;前端應用提交操作請求;連接管理連接相應的後臺數據庫並提交操作。由此可知該中間件系統有數據管理員、前端應用和後端數據庫三個外部實體。對應圖1-1中數據流和實體的對應關係,可知E1爲前端應用,E2爲數據管理員,E3爲後端數據庫。

[問題2]

本問題考查0層DFD中數據存儲的確定。說明中描述:用戶信息(用戶名、密碼)存儲在用戶表中;標準操作和後端數據庫信息存放在操作表中;權限管理維護信息存放在權限表中。因此數據存儲爲用戶表、操作表以及權限表。再根據圖1-2中D1的輸入數據流從用戶管理來,D2的輸入數據流從操作管理來,D3的輸入數據流從權限管理來,所以D1爲用戶表,D2爲操作表,D3爲權限表。

[問題3]

本問題考查0層DFD中缺失的加工和數據流。比較圖1-1和圖1-2,可知頂層DFD中的操作結果和處理後的操作結果沒有在0層DFD中體現。再根據描述:後端數據庫執行操作並將結果傳給中間件,中間件對收到的操作結果進行處理後,將其返回給前端應用。可知,需要有操作結果處理,因此P爲操作結果處理,其輸入流從後端數據庫E3來的操作結果,輸出結果爲處理後的操作結果,並返回給前端應用E1。

考查完P及其輸入輸出流之後,對圖1-2的內部數據流進行考查,以找出缺失的另外2條數據流。從圖中可以看出D2和D3只有輸入流沒有輸出流,這是常見DFD設計時的錯誤,所以首先考查D2和D3的輸出流。描述中:權限驗證是驗證用戶是否有權執行請求的操作,若用戶有權執行該操作,進行連接管理;連接管理連接相應的後臺數據庫並提交操作;權限表存儲用戶可執行的操作信息。因此,權限驗證有從權限表D3來的輸入數據流。而要連接後端數據庫,需要數據庫信息,從權限驗證的輸出流中包含有數據庫信息可知,權限驗證需要獲取到數據庫信息,所以還需從操作表D2來的輸入流。

[問題4]

本問題考查在繪製數據流圖中加工繪製時的注意事項。繪製加工時可能出現的錯誤有:加工的輸入、輸出時可能出現只有輸入而無輸出、只有輸出而無輸入、輸入的數據流無法通過加工產生輸出流以及輸入的數據流與輸出的數據流名稱相同等錯誤。

參考答案

[問題1]

E1:前端應用 E2:數據管理員 E3:後端數據庫

[問題2]

D1:用戶表 D2:操作表 D3:權限表

[問題3]

P的名稱:操作結果處理

 

名稱

起點

終點

輸入流

操作結果

E3

P

輸出流

處理後的操作結果

P

E1

缺少的數據流:

起點

終點

D2

權限驗證

D3

權限驗證

[問題4]

在繪製數據流圖的加工時,可能出現的輸入、輸出錯誤:

只有輸入而無輸出或者黑洞

只有輸出而無輸入或者奇蹟

輸入的數據流無法通過加工產生輸出流或者灰洞

輸入的數據流與輸出的數據流名稱相同

試題二

閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應欄內。

[說明]

天津市某銀行信息系統的數據庫部分關係模式如下所示:

客戶 (客戶號,姓名,性別,地址,郵編,電話)

賬戶 (賬戶號,客戶號,開戶支行號,餘額)

支行(支行號,支行名稱,城市,資產總額)

交易 (交易號,賬戶號,業務金額,交易日期)

其中,業務金額爲正值表示客戶向賬戶存款;爲負值表示取款。

[問題1]

以下是創建賬戶關係的SQL語句,賬戶號唯一識別一個賬戶,客戶號爲客戶關係的唯一標識,且不能爲空。賬戶餘額不能小於1.00元。請將空缺部分補充完整。

CREATE TABLE賬戶(

賬戶號CHAR(19) (a) PRIMARY KEY,

客戶號CHAR(10) (b)FOREIGN KEY(客戶號)REFERENcEs客戶(客戶號) ;

開戶支行號CHAR(6) NOT NULL,

餘額NUMBER(8,2) (c)CHECK(餘額>1.00)) );

[問題2]

(1)現銀行決策者希望查看在天津市各支行開戶且2009年9月使用了銀行存取服務的所有客戶的詳細信息,請補充完整相應的查詢語句。

(交易日期形式爲'2000-01-01')

SELECT DISTINCT客戶.*

FROM客戶,賬戶,支行,交易

WHERE客戶.客戶號=賬戶.客戶號 AND

賬戶.開戶支行號=支行.支行號AND

(d)支行.城市='天津市'

 AND

交易.賬戶號=賬戶.賬戶號 AND

(e)

(e)交易.交易日期 LIKE'2009-09-%'

 ;

上述查詢優化後的語句如下,請補充完整。

SELECT DISTINCT客戶.*

FROM 客戶,賬戶, (f)SELECT*FROM 支行 WHERE城市='天津市' AS新支行, SELECT*FROM 交易 WHERE交易日期LIKE'2009-09%'(g)AS新交易

WHERE客戶.客戶號=賬戶.客戶號AND

賬戶.開戶支行號=新支行.支行號AND

新交易.賬戶號=賬戶.賬戶號;

(2)假定一名客戶可以申請多個賬戶,給出在該銀行當前所有賬戶餘額之和超過百萬的客戶信息並按客戶號降序排列。

SELECT *

FROM客戶

WHERE (h)

(h)客戶號IN

(SELECT客戶號FROM賬戶GROUP BY客戶號 (i)

(i)HAVING SUM(餘額)>1000000.00或等價表示

)

ORDER BY (j)

(i)客戶號 DESC

;

[問題3]

(1)爲賬戶關係增加一個屬性“賬戶標記”,缺省值爲0,取值類型爲整數;並將當前賬戶關係中所有記錄的“賬戶標記”屬性值修改爲0。請補充相關SQL語句。

ALTER TABLE 賬戶 (k) ADD賬戶標記INTDEFAULT 0;

UPDATE 賬戶 (l)SET賬戶標記=0;;

(2)對於每筆金額超過10萬元的交易,其對應賬戶標記屬性值加1,給出觸發器實現的方案。

CREATE TRIGGER 交易_觸發器 (m)AFTER INSERT ON交易

REFERENCING NEW ROW AS 新交易

FOR EACH ROW

WHEN (n)新交易.金額>100000.00或等價表示

BEGIN ATOMIC

UPDATE 賬戶 SET 賬戶標記=賬戶標記+1

WHERE (o) 賬戶.賬戶號=新交易.賬戶號;

COMMIT WORK;

END

試題二分析

本題考查SQL語句的基本語法與結構知識。

此類題目要求考生掌握SQL語句的基本語法和結構,認真閱讀題目給出的關係模式,針對題目的要求具體分析並解答。本試題已經給出了4個關係模式,需要分析每個實體的屬性特徵及實體之間的聯繫,補充完整SQL語句。

[問題1]

由於問題1中“賬戶號唯一識別一個賬戶”可知賬戶號爲賬戶關係的主鍵,即不能爲空且唯一標識一條賬戶信息,因此需要用PRIMARY KEY對該屬性進行主鍵約束;又由於“客戶號爲客戶關係的唯一標識,且不能爲空”可知客戶號爲客戶關係的主鍵,在賬戶關係中應作外鍵,用FOREIGN KEY對該屬性進行外鍵約束;由“賬戶餘額不能小於1.00元”可知需要限制賬戶餘額屬性值的範圍,通過CHECK約束來實現。從上分析可見,完整的SQL語句如下:

CREATE TABLE賬戶(

賬戶號CHAR(19) PRIMARY KEY,

客戶號CHAR(10) FOREIGN KEY(客戶號)REFERENcEs客戶(客戶號),

開戶支行號CHAR(6) NOT NULL,

餘額 NUMBER(8,2) CHECK(餘額>1.00));

注:PRIMARY KEY可替換爲NOT NULL UNIQUE或NOT NULL PRIMARY KEY。

[問題2]

SQL查詢通過SELECT語句實現。

(1)根據問題2要求應在表連接條件的基礎上,需要添加兩個條件:①支行關係的城市屬性值爲“天津市”,即支行城市='天津市';②在2009年9月存在交易記錄,由於交易日期形式爲'2000-01-01',所以需要通過模糊匹配來實現,用LIKE關鍵詞和通配符表示,即交易.交易日期LIKE'2009-09-%'。

WHERE子句中條件的先後順序會對執行效率產生影響。假如解析器是按照先後順序依次解析並列條件,優化的原則是:表之間的連接必須出現在其他WHERE條件之後,那些可以過濾掉最多條記錄的條件儘可能出現在WHERE子句中其他條件的前面。要實現上述優化過程,可以重新組織WHERE條件的順序或者通過嵌套查詢以縮小連接記錄數目的規模來實現。

根據問題2要求,考生需要添加兩個子查詢以縮小參與連接的記錄的數目,即篩選出天津市的所有支行(SELECT+FROM支行WHERE城市='天津市'),而且找到2009年9月發生的交易記錄(SELECT+FROM交易WHERE交易日期LIKE'2009-09-%'),然後再做連接查詢。

(2)根據問題2要求,可通過予查詢實現“所有賬戶餘額之和超過百萬的客戶信息”的查詢;對SUM函數計算的結果應通過HAVING條件語句進行約束;降序通過DESC關鍵字來實現。

SELECT *

FROM 客戶

WHERE 客戶號 IN

(SELECT 客戶號 FROM 賬戶 GROUP BY客戶號HAVING SUM(餘額)>1000000.00)

ORDER BY客戶號 DESC;

[問題3]

(1)關係模式的修改通過ALTER語句來實現,使用ADD添加屬性;使用SET修改屬性值。

ALTER TABLE 賬戶 ADD 賬戶標記 INT DEFAULT 0;

UPDATE 賬戶 SET 賬戶標記 =0;

(2)創建觸發器可通過CREATE TRIGGER語句實現,問題3要求考生掌握該語句的基本語法結構。按照問題3要求,在交易關係中插入一條記錄時觸發器應自動執行,故需要創建基於INSERT類型的觸發器,其觸發條件是新插入交易記錄的金額屬性值>100000.00;最後添加表連接條件。完整的觸發器實現方案如下:

CREATE TRIGGER交易觸發器AFTER INSERT ON交易

REFERENCING NEW ROW AS新交易

FOR EACH ROW

WHEN新交易.金額>100000.00

BEGIN ATOMIC

UPDATE 賬戶 SET 賬戶標記=賬戶標記+1

WHERE 賬戶.賬戶號=新交易.賬戶號;

COMMIT WORK;

END

參考答案

[問題1]

(a)PRIMARY KEY/NOT NULL UNIQUE/NOT NULL PRIMARY KEY

(b)FOREIGN KEY(客戶號)REFERENCES客戶(客戶號)

(C)CHECK(餘額>1.00)

[問題2]

(1)

(d)支行.城市='天津市'

(e)交易.交易日期 LIKE'2009-09-%'或等價表示

注:(d)(e)次序無關

(f)(SELECT*FROM 支行 WHERE城市='天津市')

(g)(SELECT*FROM 交易 WHERE交易日期LIKE'2009-09%')或等價表示

(2)

(h)客戶號IN

(i)HAVING SUM(餘額)>1000000.00或等價表示

(i)客戶號 DESC

[問題3]

(1)

(k)ADD賬戶標記INT

(1)SET賬戶標記=0;(2)

(m)AFTER INSERT

(n)新交易.金額>100000.00或等價表示

(o)賬戶.賬戶號=新交易.賬戶號

試題三

閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應欄內。

[說明]

某學校擬開發一套實驗管理系統,對各課程的實驗安排進行管理。

[需求分析]

每個實驗室可進行的實驗類型不同。由於實驗室和實驗員資源有限,需根據學生人數分批次安排實驗室和實驗員。一門含實驗的課程可以開設給多個班級,每個班級每學期可以開設多門含實驗的課程。每個實驗室都有其可開設的實驗類型。一門課程的一種實驗可以根據人數、實驗室的可容納人數和實驗室類型,分批次開設在多個實驗室的不同時間段。一個實驗室的一次實驗可以分配多個實驗員負責輔導實驗,實驗員給出學生的每次實驗成績。

1.課程信息包括:課程編號、課程名稱、實驗學時、授課學期和開課的班級等信息;實驗信息記錄該課程的實驗進度信息,包括:實驗名、實驗類型、學時、安排周次等信息,如表3-1所示。

表3-1   課程及實驗信息

課程編號

15054037

課程名稱

數字電視原理

實驗學時

12

班級

電0501,信0501,計0501

授課院系

機械與電氣工程

授課學期

第三學期

序號

實驗名

實驗類型

難度

學時

安排周次

1505403701

音視頻AD-DA實驗

驗證性

1

2

3

1505403702

音頻編碼實驗

驗證性

2

2

5

1505403703

視頻編碼實驗

演示性

0.5

1

9

2.以課程爲單位制定實驗安排計劃信息,包括:實驗地點,實驗時間、實驗員等信息。實驗計劃如表3-2所示。

表3-2   實驗安排計劃

課程編號

15054037

課程名稱

數字電視原理

安排學期

2009年秋

總人數

220

實驗編號

實驗名

實驗員

實驗時間

地點

批次號

人數

1505403701

音視頻AD-DA實驗

盛×,陳×

第3週週四晚上

實驗三樓310

1

60

1505403701

音視頻AD-DA實驗

盛×,陳×

第3週週四晚上

實驗三樓310

2

60

1505403701

音視頻AD-DA實驗

吳×,劉×

第3週週五晚上

實驗三樓311

3

60

1505403701

音視頻AD-DA實驗

吳×

第3週週五晚上

實驗三樓311

4

40

1505403702

音頻編碼實驗

盛×,劉×

第5週週一下午

實驗四樓410

1

70

3.由實驗員給出每個學生每次實驗的成績,包括:實驗名,學號,姓名,班級,實驗成績等信息。實驗成績如表3-3所示。

表3-3 實驗成績        實驗員: 盛×

實驗名

音視頻AD-DA實驗

課程名

數字電視原理

學號

姓名

班級

實驗成績

030501001

陳民

信0501

87

030501002

劉志

信0501

78

040501001

張勤

計0501

86

4.學生的實驗課程總成績根據每次實驗的成績以及每次實驗的難度來計算。

[概念模型設計]

根據需求階段收集的信息,設計的實體聯繫圖(不完整)如圖3-1所示。

[邏輯結構設計]

根據概念模型設計階段完成的實體聯繫圖,得出如下關係模式(不完整):

課程(課程編號,課程名稱,授課院系,實驗學時)

班級(班級號,專業,所屬系)

開課情況( (1) ,授課學期)

實驗( (2) ,實驗類型,難度,學時,安排周次)

實驗計劃( (3) ,實驗時間,人數)

實驗員( (4) ,級別)

實驗室(實驗室編號,地點,開放時間,可容納人數,實驗類型)

學生( (5) ,姓名,年齡,性別)

實驗成績( (6) ,實驗成績,評分實驗員)

[問題1]

補充圖3-1中的聯繫和聯繫的類型。

[問題2]

根據圖3-1,將邏輯結構設計階段生成的關係模式中的空(1)~(6)補充完整。對所有關係模式,用下劃線標出各關係模式的主鍵。

[問題3]

如果需要記錄課程的授課教師,新增加“授課教師”實體。請對圖3-1進行修改,畫出修改後的實體問聯繫和聯繫的類型。

試題三分析

本題考查數據庫概念結構設計及向邏輯結構轉換的掌握。

此類題目要求考生認真閱讀題目,根據題目的需求描述,給出實體問的聯繫。

[問題1]

根據題意由“一門含實驗的課程可以開設給多個班級,每個班級每學期可以開設多門含實驗的課程”可知課程和班級之間的開設關係爲m:n聯繫。由“一個實驗室的一次實驗可以分配多個實驗員負責輔導實驗”可知實驗、實驗室與實驗員之間的安排關係爲k:n:m聯繫。由“實驗員給出學生的每次實驗成績”可知實驗、學生與實驗員之間的成績關係爲k:n:m聯繫。班級和學生之間的包含關係爲1:n聯繫。

[問題2]

根據題意,可知課程編號是課程的主鍵,班級號是班級的主鍵。從表3-1可見,開課情況是體現課程與班級間的m:n聯繫,因此開課情況關係模式應該包含課程編號和班級號,並共同作爲主鍵。一門課程包含多次實驗,實驗與課程之間是m:1關係,因此,由表3-1可知,實驗關係模式應包含實驗編號和課程編號,並且以實驗編號爲主鍵,以課程編號爲外鍵。在制定試驗計劃時,每個班的每次實驗可能按實驗室被分成多個批次,每個批次的實驗會有若干名實驗員來輔導學生實驗並打分。實驗員關係模式應該記錄實驗員編號和實驗員姓名,並以實驗員編號爲主鍵。實驗室編號是實驗室的主鍵。從表3-2可知,實驗計劃關係模式應記錄實驗編號、批次號和授課學期,並且共同作爲主鍵。從表3-3可知,實驗成績關係模式記錄每個學生的每次實驗成績,應包含學號和實驗編號,並共同作爲主鍵。

[問題3]

由於授課教師負責給若干個班級開設若干門課程,因此,課程、班級和授課教師之間的開設關係是k:n:m聯繫。

參考答案

[問題1]

答案參見圖3-1。

[問題2]

(1)課程編號,班級號

(2)實驗編號,課程編號

(3)實驗編號,批次號,安排學期,,實驗室編號,實驗員編號

(4)實驗員編號,實驗員姓名

(5)學號,班級號

(6)實驗編號,學號

其他關係模式主鍵:

課程(課程編號,課程名稱,授課院系,實驗學時)

班級(班級號,專業,所屬系)

實驗室(實驗室編號,地點,開放時間,可容納人數,實驗課類型)

[問題3]

試題四

閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應欄內。

[說明]

某旅行社擬開發一套旅遊管理系統,以便管理旅遊相關的信息。

1.旅行社可發佈旅遊線路的信息,包含:線路的價格、天數、住宿情況,以及具體的行程安排等。不同的線路參觀的景點及住宿情況不相同,如表4-1所示。

表4-1   旅遊線路信息

線路編號

SO-501

價格

2000

天數

4

日程號

景點

城市

住宿

D1

接站集合,天安門、紫禁城、頤和園

北京

建國飯店

D2

上午參觀北京胡同,下午飛往西安

北京,西安

花園飯店

D3

上午參觀兵馬俑,下午參觀大雁塔

西安

花園飯店

D4

上午參觀鐘鼓樓,下午返回

西安

 

2.遊客與旅行社溝通,選擇適合自己的線路,並由旅行社爲其生成訂單,以記錄遊客聯繫人的姓名、身份證號、聯繫方式、人數、所選線路、導遊安排和票務信息。旅行社爲遊客在行程中的每個城市安排一個負責導遊,負責遊客在該城市的具體旅行安排。同一城市的負責導遊相同,不同城市的負責導遊有可能不同。

3.旅行社的每位員工只屬於一種固定的員工類別,系統可記錄員工的多部手機號。旅行社按月統計導遊每月的帶團人數和遊客投訴次數,以計算導遊的當月月薪。

根據上述需求,初步設計了旅遊信息數據庫,其關係模式如圖4-1所示。

關係模式中主要屬性的含義及約束如表4-2所示。

[問題1]

對關係“線路信息”,請回答以下問題:

(1)列舉出所有不屬於任何候選鍵的屬性(非鍵屬性)。

(2)關係“線路信息”是否爲BCNF範式,用60字以內文字簡要敘述理由。

表4-2   主要屬性含義及約束

屬性

含義及約束條件

線路編號

唯一標識某條旅遊的線路信息

日程號

旅遊行程中的某一大,如:D1代表第1天,Dn代表第n天

住宿

不同線路遊客在不同城市的住宿情況說明

城市

旅遊行程中某一天遊客所在的城市名稱

景點

旅遊行程中某一天遊客遊覽的景點名稱

人數

某個訂單的總遊客數

訂單價格

某個訂單的總價

車票班次

旅行過程中的車票班次,包括:火車車次、航班班次等

車票類型

車票類型分爲:飛機、火車

票數

針對某訂單某班次的車票數量

總價格

針對某訂單某班次的車票的總價格

計薪月

某員工的被投訴次數和月薪所對應的年份和月份,如:2006年5月

手機號

允許一個員工有多個手機號

被投訴次數

某員工某計薪月的被投訴次數

帶團人數

某員工某計薪月的帶團人數總和

月薪

某員工某計薪月的薪水金額

員工類別

員工類別分爲:導遊或其他

 

[問題2]

對關係“訂單信息”,請回答以下問題:

(1)“訂單信息”是否爲2NF範式,用100字以內文字簡要說明會產生什麼問題。

(2)把“訂單信息”分解爲第三範式,分解後的關係名依次爲:訂單信息1,訂單信息2,…。

(3)列出分解後的各關係模式的主鍵。

[問題3]

對關係“員工信息”,請回答以下問題:

(1)關係“員工信息”是不是第四範式,用100字以內文字敘述理由。

(2)若“員工信息”不是第四範式,將其分解爲第四範式,分解後的關係名依次爲:員工信息1,員工信息2,…。

試題四分析

本題考查數據庫理論的規範化。

[問題1]

本問題考查非主屬性和BCNF範式。

根據題意和“線路信息”關係模式可知,不屬於任何候選鍵的屬性(非鍵屬性)爲:價格,天數。

根據BCNF範式的要求:每一個函數依賴的決定因素都包含碼。

而“線路信息”關係模式的函數依賴爲:

線路編號→價格,天數

因此,“線路信息”關係模式可以達到BCNF範式。

[問題2]

本問題考查第二範式和第三範式的理解和應用。

根據第二範式的要求:不存在非主屬性對碼的部分依賴。

根據題意和“訂單信息”關係模式可知,不屬於任何候選鍵的屬性(非鍵屬性)爲:

線路編號,聯繫人名稱,聯繫人身份證號,人數,聯繫方式,訂單價格,出發時間,負責城市。

“訂單信息”關係模式的函數依賴爲:

訂單號,負責導遊工號→負責城市

訂單號→線路編號,聯繫人身份證號,人數,訂單價格,出發時間

聯繫人身份證號→聯繫人名稱,聯繫方式

“訂單信息”關係模式存在非主屬性對碼的部分依賴,因此,不屬於第二範式。

根據第三範式的要求:每一個非主屬性既不部分依賴於碼也不傳遞依賴於碼。

因此,需要根據第三範式的要求和“訂單信息”關係模式的函數依賴,對“訂單信息”關係模式進行分解以滿足第三範式的要求。

[問題3]

本問題考查第四範式的理解和應用。

根據第四範式的要求:不允許有非平凡且非函數依賴的多值依賴。

“員工信息”關係模式的函數依賴爲:

員工工號→姓名,年齡,員工類別

員工工號→手機號

員工工號→計薪月,被投訴次數,帶團人數,月薪

由“員工信息”關係模式的函數依賴可知,“員工信息”關係模式存在部分依賴,所以,“員工信息”關係模式不滿足第二範式;而“員工信息”關係模式也存在多值依賴,所以,“員工信息”關係模式不滿足第四範式。

因此,需要根據第四範式的要求和“員工信息”關係模式的函數依賴,對“員工信息”關係模式進行分解以滿足第四範式的要求。

參考答案

[問題1]

(1)價格,天數

(2)“線路信息”關係模式可以達到BCNF範式。

因爲非主屬性價格、天數完全函數依賴於碼且不傳遞依賴於碼,且僅一個候選碼,併爲單屬性。

或答:每個函數依賴的決定因素都包含碼。

[問題2]

(1)“訂單信息”關係不滿足第二範式,即非主屬性不完全依賴於碼。

會造成插入異常、刪除異常和修改複雜(或修改異常)。

(2)分解後的關係模式如下:

訂單信息1(訂單號,線路編號,聯繫人身份證號,出發時間,訂單價格,人數)

訂單信息2(聯繫人身份證號,聯繫人名稱,聯繫方式)

訂單信息3(訂單號,負責導遊工號,負責城市)

(3)分解後的主鍵如下:

訂單信息1(訂單號,線路編號,聯繫人身份證號,出發時間,訂單價格,人數)

訂單信息2(聯繫人身份證號,聯繫人名稱,聯繫方式)

訂單信息3(訂單號,負責導遊工號,負責城市)

[問題3]

(1)“員工信息”關係模式,不滿足第四範式。

答出以下內容之一即可:

①該關係模式不滿足第二範式。

②該關係模式存在多值依賴。

③員工工號,計薪月→姓名,年齡,員工類別,爲部分決定。

④員工工號→手機號。

(2)分解後的關係模式如下:

員工信息1(員工工號,姓名,年齡,員工類別)

員工信息2(員工工號,手機號)

員工信息3(員工工號,計薪月,被投訴次數,帶團人數,月薪)

試題五

閱讀下列說明,回答問題1至問題3,將解答填入答題紙的對應欄內。

[說明]

某航空售票系統負責所有本地起飛航班的機票銷售,並設有多個機票銷售網點。各售票網點使用相同的售票程序。假設售票程序中用到的僞指令如表5-1所示。

表5-1   僞指令含義

僞指令

說明

R(A,x)

返同航班A當前的剩餘機票數給變量x

W(A,x)

當前數據庫中航班A的剩餘機票數置爲x

假設某售票網點一次售出a張航班A的機票,則售票程序的僞指令序列爲:R(A,x);W(A,X-a)。根據上述業務及規則,完成下列問題:

[問題1]

若兩個售票網點同時銷售航班A的機票,在數據庫服務器端可能出現如下的調度:

A:R1(A,x),R2(A,X),W1(A,x-1),W2(A,x-2);

B:R1(A,x),R2(A,x),W2(A,x-2),W1(A,x-1);

C:R1(A,x),W1(A,x-1),R2(A,X),W2(A,x-2);

其中Ri(A,x),Wi(A,x)分別表示第i個銷售網點的讀寫操作,其餘類同。

假設當前航班A剩餘10張機票,分析上述三個調度各自執行完後的剩餘票數,並指出錯誤的調度及產生錯誤的原因。

[問題2]

(1)判定事務併發執行正確性的準則是什麼?如何保證併發事務正確地執行?

(2)引入相應的加解鎖指令,重寫售票程序的僞指令序列,以保證正確的併發調度。

[問題3]

下面是用E-SQL實現的機票銷售程序的一部分,請補全空缺處的代碼。

EXEC SQL SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

EXEC SQL SELECT balance INTO :x FROM tickets WHERE flight='A';

printf("航班A當前剩餘機票數爲:%d\n請輸入購票數:",x);

scanf("%d",&a);

x=x-a;

if(x<0)

EXEC SQL ROLLBACK WORK;

printf("票數不夠,購票失敗!");

else{

EXEC SQL UPDATE tickets SET (a);

if(SQLCA.sqlcode<>SUCCESS)

EXEC SQL ROLLBACK WORK;

else

(b) ;

}

試題五分析

本題考查的是併發控制的概念和應用,屬於比較傳統的題目,考查點也與往年類似。

[問題1]

本問題考查併發情況下不同的調度可能產生不同結果的情況。針對兩個併發執行的售票程序,會相互影響從而得到錯誤的結果。

[問題2]

本問題考查對事務併發控制的相關知識的理解掌握。事務併發調度是否正確,可通過對非衝突語句進行交換,若最終將併發調度通過交換非衝突語句轉換成串行調度,則該併發調度爲可串行化調度,可串行化調度被作爲事務併發執行正確性的準則。

爲保證可串行化調度,在事物執行過程中引入相應指令進行控制,即兩段鎖協議(2PL),即對數據讀之前先加讀鎖,寫前加寫鎖,事務只有獲得相應的鎖才能操作數據,加解鎖過程分爲兩個階段,前一階段只能加鎖,後一階段只能解鎖,不允許有交叉。兩段鎖協議是保證併發事務可串行化調度的充分條件。

針對給出的僞指令操作序列,在事務讀取數據之前加Slock()指令,寫數據之前加Xlock()指令,並保證讀/寫鎖不交叉,即滿足兩段鎖協議。

[問題3]

本問題考查對2PL協議理論與SQL中的隔離級別,以及嵌入式SQL的編程實踐。

本地給出的空缺(a)要補充的是嵌入式SQL的更新語句;空缺(b)要補充的是嵌入式SQL中的事務提交語句。

參考答案

[問題1]

調度A結果:8 調度B結果:9 調度C結果:7

調度A、B結果錯誤,因爲破壞了事務的隔離性。一個事務的執行結果被另一個所覆蓋。

[問題2]

(1)判定事務併發執行正確性的準則是滿足可串行化調度。要保證併發事務正確地執行,採用兩段鎖協議(2PL)。

(2)重寫後的售票程序僞指令序列:

XLock(A);R (A,x); w (A, x-a); Unlock(A);

[問題3]

(a)balance= :x WHERE flight='A'

(b)EXEC SQL COMMIT WORK

發佈了146 篇原創文章 · 獲贊 149 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章