【文章內(nèi)容簡介】
依賴、完全函數(shù)依賴、傳遞依賴、1NF、2NF、3NF、BCNF。函數(shù)依賴:設(shè)R(U)是屬性集U上的關(guān)系模式。X,Y是U的子集。若對于R(U)的任意一個可能的關(guān)系r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱X函數(shù)確定Y或Y函數(shù)依賴于X。部分函數(shù)依賴:設(shè)關(guān)系模式R(U)中,X,YU,若X→Y,但對于X的某一個真子集Z→Y成立,則稱Y部分函數(shù)依賴于X。完全函數(shù)依賴:設(shè)關(guān)系模式R(U)中,X,YU,如果X→Y,并且對于X的任何一個真子集Z,Z→Y都不成立,則稱Y完全依賴于X,記作XY。傳遞依賴:在關(guān)系模式R(U)中,設(shè)X、Y、Z是R的三個不同屬性子集,如果X→Y()成立,但Y→X不成立,而Y→Z(),則稱Z對X傳遞函數(shù)依賴。 1NF:在關(guān)系模式R中的每一個具體關(guān)系r中,如果每個屬性值都是不可再分的最小數(shù)據(jù)單位,則稱R是第一范式關(guān)系模式,簡記為R1NF。2NF:若關(guān)系模式R是1NF,且所有非主屬性都完全函數(shù)依賴于任意一個候選碼,則稱R 是第二范式關(guān)系模式,簡記為R2NF。3NF:若關(guān)系模式R是2NF,且所有非主屬性對任何候選關(guān)鍵字都不存在傳遞函數(shù)依賴,則稱R是第三范式關(guān)系模式,簡記為R3NF。BCNF:若關(guān)系模式R是1NF,如果對于R的每個函數(shù)依賴X→Y,若YX,則X必含有候選碼,則稱R是BCNF范式。換句話說,在關(guān)系模式R中,如果每一個決定因素都包含候選碼,則RBCNF。2. 設(shè)一關(guān)系為:訂單(訂單號,顧客姓名,商品貨號,定購數(shù)量,交貨日期),判斷此關(guān)系屬于哪一范式,為什么?此關(guān)系的主碼是訂單號,主屬性只有一個,因此它屬于BCNF。3.設(shè)關(guān)系模式R(A,B,C),F(xiàn)是R上成立的FD集,有F={ A→C,B→C }。此題需將題目改為:設(shè)關(guān)系模式R(A,B,C),F(xiàn)是R上成立的FD集,有F={ A→B,B→C }。 (1)試說明為什么R不是3NF模式?由于R的主碼為A,存在傳遞函數(shù)依賴:A→B,B→C;因此R不屬于第三范式。 (2)試分析模式R的數(shù)據(jù)冗余問題。關(guān)系R中的C屬性會存在在數(shù)據(jù)冗余。(3)試把R分解成3NF模式集。分解成3NF模式集:R1(A,B);R2(B,C)。4.寫出關(guān)系模式規(guī)范化的步驟。1NF(消除非主屬性對碼的部分函數(shù)依賴)→2NF(消除非主屬性對碼的傳遞函數(shù)依賴)→ 3NF(消除主屬性對碼的部分和傳遞函數(shù)依賴)→BCNF5.試述模式分解時考慮無損連接性和保持函數(shù)依賴的意義。一個關(guān)系分解為多個關(guān)系,相應(yīng)地原來存儲在一張二維表內(nèi)的數(shù)據(jù)就要分散存儲到多張二維表中,要使這個分解有意義,起碼的要求是后者不能丟失前者的信息,如果一個分解具有無損連接性,則它能夠保證不丟失信息。而如果一個分解保持了函數(shù)依賴,則它可以減輕或解決各種異常情況。第四章 習(xí) 題一、單項選擇題1.在SQL中,與關(guān)系代數(shù)中的投影運算對應(yīng)的子句是(A ) A SELECT B FROM C WHERE D ORDER BY2. 在SQL的語句中,ALTER的作用是( C) A 刪除基本表 B 修改基本表中的數(shù)據(jù) C 修改基本表的結(jié)構(gòu) D 修改視圖3. 用SQL語言描述“在教師表中查找女教師的全部信息”,以下描述正確的是( C )A SELECT FROM 教師表 IF(性別=‘女’)B SELECT 性別FROM 教師表 IF(性別=‘女’)C SELECT * FROM 教師表 WHERE(性別=‘女’) D SELECT * FROM 性別WHERE(性別=‘女’)4. 在基本SQL語言中,不可以實現(xiàn)( D)A 定義視圖 B 定義基本表C 查詢視圖和基本表 D 并發(fā)控制5. SELECT語句執(zhí)行的結(jié)果是( B) A 數(shù)據(jù)項 B 元組 C 表 D 數(shù)據(jù)庫6. 在SQL中,用戶可以直接操作的是( A) A 基本表 B 視圖 C 基本表或視圖 D 基本表和視圖7. 在SQL中使用UPDATE對表中數(shù)據(jù)進(jìn)行修改時,應(yīng)使用的子句是( D) A WHERE B FROM C VALUES D SET8. SQL語言具有的功能是( B) A 關(guān)系規(guī)范化,數(shù)據(jù)操作,數(shù)據(jù)控制 B 數(shù)據(jù)定義,數(shù)據(jù)操作,數(shù)據(jù)控制 C 數(shù)據(jù)定義,關(guān)系規(guī)范化,數(shù)據(jù)控制 D 數(shù)據(jù)定義,關(guān)系規(guī)范化,數(shù)據(jù)操作9. 當(dāng)選擇滿足一定條件的元組進(jìn)行分組時,應(yīng)使用的關(guān)鍵字是(C ) A SELECT B GROUP C WHERE D HAVING10. 使用CREATE INDEX語句建立的是(C ) A 數(shù)據(jù)庫 B 表 C 索引 D 視圖二、填空題1.SQL插入記錄的命令是INSERT ,刪除記錄的命令是__DELETE__,更新記錄的命令是_ALTER_。2.SQL查詢語句中,在SELECT子句中允許出現(xiàn)列名和__表達(dá)式_。3. SQL語句中,Order By可以對__列_進(jìn)行排序。4. 在SQL查詢語句中,如果要去掉查詢結(jié)果中的重復(fù)值,需使用__DISTINCT _。5. 基本表中增加一個新列后,各元組在新列上的值是__NULL__。6.SQL查詢語句中,對應(yīng)關(guān)系代數(shù)中的“選擇”運算的語句是__where__。7.在SELECT語句中,用*號表示__所有屬性列_。8.在SQL語言中,DELETE語句的作用是__從表中刪除行__。9.SQL包括了數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操作和__數(shù)據(jù)控制_功能。10.在SQL中表示并集的關(guān)鍵字是__union_。三、簡答1. SQL語言有什么特點,包括哪幾部分的功能?SQL語言的主要特點包括如下:(1) 功能一體化。功能強大,通用性好,把多種功能融為一體;(2) 高度非過程化。用戶只需要指出“做什么”,而不需要指出“怎么做”,數(shù)據(jù)的存取和整個語句的操作過程由系統(tǒng)自動完成,大大減輕了用戶的負(fù)擔(dān);(3) 面向集合的操作方式。查詢的結(jié)果和更新操作的對象均可為元組的集合;(4) 簡單易學(xué),靈活易用。語言簡潔,語法簡單。既可直接使用SQL語句對數(shù)據(jù)庫進(jìn)行操作,也可把SQL語句嵌入到高級語言程序中。SQL主要有三大功能:數(shù)據(jù)定義功能可用于定義SQL模式、基本表、視圖和索引;數(shù)據(jù)操縱又可分成數(shù)據(jù)查詢和數(shù)據(jù)更新兩類,其中數(shù)據(jù)更新又分為插入、刪除和修改三種操作;數(shù)據(jù)控制功能包括對基本表和視圖的授權(quán),完整性規(guī)則的描述。2. 什么是嵌套查詢?什么是相關(guān)子查詢?在SQL語言中,一個SELECTFROMWHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊中的查詢稱為嵌套查詢。子查詢的查詢條件依賴于外層父查詢的某個屬性值,這類查詢稱之為相關(guān)子查詢。求這類查詢時,由于子查詢和父查詢相關(guān),所以子查詢需要反復(fù)求值。3. 設(shè)顧客商品關(guān)系數(shù)據(jù)庫有三個基本表,表結(jié)構(gòu)如下:商品表:Article (商品號,商品名,單價,庫存量)客戶表:Customer (顧客號,顧客名,性別,年齡,電話)訂單表:OrderItem (顧客號,商品號,數(shù)量,購買價,日期)(1)用SQL語言創(chuàng)建一個視圖GM_VIEW,檢索顧客的顧客號、顧客名和訂購商品的商品號以及數(shù)量。CREAT VIEW GM_VIEW(顧客號,顧客名,商品號,數(shù)量) ASSELECT _ ,顧客名,商品號,數(shù)量___FROM Customer, OrderItemWHERE __Customer .顧客號=;(2)請用SQL語言檢索一次訂購的商品數(shù)量最多的顧客名。SELECT 顧客名FROM Customer, OrderItemWHERE _Customer .顧客號= 數(shù)量_=(SELECT_max(數(shù)量)_FROM OrderItem);(3)請用SQL語言找出女顧客購買的商品號、商品名和數(shù)量合計。SELECT _ ,商品名,SUM(數(shù)量)_FROM OrderItem, Artcle, Customer, WHERE __ Customer .顧客號= and =OrderItem .商品號 and 性別=“女”_GROUP BY ,商品名;(4)請用SQL語言ALTER TABEL命令給商品表Article增加一個字段,字段名為:產(chǎn)地,數(shù)據(jù)類型為:CHAR,長度為:30,命令如下:ALTER TABEL _Article add 產(chǎn)地 char(30)__四、 用SQL查詢語句完成對學(xué)生管理數(shù)據(jù)庫中三個基本表S、SC、C的以下查詢操作。(1)統(tǒng)計有學(xué)生選修的課程門數(shù)。SELECT DISTINCT Count([Cno]) AS 課程門數(shù)FROM SC。(2)查詢選修編號B03課程的學(xué)生的平均成績。SELECT Avg([Score]) AS 平均成績FROM SCWHERE ((()=39。B0339。))。(3)統(tǒng)計每門課程的學(xué)生選修人數(shù)。SELECT , Count() AS Sno之計數(shù)FROM SCGROUP BY 。(4)查詢003系同學(xué)選修課程情況。SELECT , , , FROM SC INNER JOIN S ON = WHERE ((()=39。00339。))。