




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、教材:數(shù)據(jù)庫技術(shù)及應用 2006年4月寧可、吳菁、胡海編著本章要點 關(guān)系數(shù)據(jù)庫 結(jié)構(gòu)化查詢語言 數(shù)據(jù)庫設(shè)計理論 目 錄2.1 關(guān)系數(shù)據(jù)庫 2.1.1 關(guān)系數(shù)據(jù)結(jié)構(gòu) 2.1.2 關(guān)系操作 2.1.3 關(guān)系的完整性 2.2 SQL語言 2.2.1 SQL概述及特點 2.2.2 SQL數(shù)據(jù)定義 2.2.3 SQL數(shù)據(jù)查詢 2.2.4 SQL數(shù)據(jù)操縱 2.2.5 數(shù)據(jù)控制 2.3 關(guān)系數(shù)據(jù)理論 2.3.1 關(guān)系模式可能存在的問題 2.3.2 函數(shù)依賴及規(guī)范化小結(jié)2.1 關(guān)系關(guān)系數(shù)據(jù)庫數(shù)據(jù)庫 關(guān)系數(shù)據(jù)庫系統(tǒng)是支持關(guān)系模型的數(shù)據(jù)庫系統(tǒng)。關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合和關(guān)系完整性約束三部分組成。 關(guān)系
2、數(shù)據(jù)庫是表的集合,數(shù)據(jù)庫中的表,數(shù)學家稱為關(guān)系。關(guān)系數(shù)據(jù)庫中還定義了關(guān)系操作和完整性約束,關(guān)系操作就是對表中的數(shù)據(jù)的處理、查詢,完整性約束就是表中的數(shù)據(jù)要滿足的條件,這些條件由數(shù)據(jù)庫系統(tǒng)自動維護,產(chǎn)生違反這些約束條件的對數(shù)據(jù)的操作會被拒絕執(zhí)行。 2.1.1 關(guān)系數(shù)據(jù)關(guān)系數(shù)據(jù)結(jié)構(gòu)結(jié)構(gòu) 在關(guān)系模型中,無論是實體還是實體之間的聯(lián)系均由單一的結(jié)構(gòu)即關(guān)系(表)來表示。關(guān)系模型是建立在集合代數(shù)的基礎(chǔ)上的。 1 關(guān)系的定義 在用戶觀點下,關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表。二維表的每一列稱為屬性。每個屬性有一個取值范圍,稱為值域。每個屬性對應一個值域。下面是二維表的一個實例。 學號學號姓名姓名性性別別1張
3、三男2李四男2 關(guān)系中的基本名詞(1) 關(guān)鍵字 能唯一標識一行記錄或元組的一個或一組屬性。(2) 候選關(guān)鍵字(Candidate key)和主關(guān)鍵字(Primary key) 能作為關(guān)鍵字的屬性可能有很多,這些屬性稱為候選關(guān)鍵字。為數(shù)據(jù)管理方便,若一個關(guān)系有多個候選關(guān)鍵字時,指定其中一個為主關(guān)鍵字。(3) 主屬性(Primary Attribute)和非主屬性(Non-key Attribute) 候選關(guān)鍵字中的屬性為主屬性。不包含在任何候選關(guān)鍵字中的屬性為非主屬性。3 數(shù)據(jù)庫中關(guān)系的類型 關(guān)系可以有三種類型:基本關(guān)系(通常稱為基本表或基表)查詢表和視圖表。 (1) 基本表 基本表是關(guān)系數(shù)據(jù)庫
4、中實際存在的表,它是實際存儲數(shù)據(jù)的邏輯表。 (2) 查詢表 它是從基本表中查詢得到的,一般是臨時表。 (3) 視圖表 視圖表是由基本表或其它視圖表導出的表,它是為數(shù)據(jù)處理方便以及數(shù)據(jù)安全要求而設(shè)計的虛表,它一般是不存儲數(shù)據(jù)的,而只是存儲提取數(shù)據(jù)的條件,它的數(shù)據(jù)依賴于基本表。 4 基本關(guān)系的性質(zhì)基本關(guān)系具有如下六條性質(zhì):(1) 列是同性質(zhì)的,即同一列中的分量是同一類型的數(shù)據(jù)。 (2) 關(guān)系中的列又稱為屬性,并賦予屬性名。不同列的屬性名不同。不同列可以取相同的數(shù)據(jù)類型。 (3) 列的次序可以任意交換。 (4) 任意兩個元組不能完全相同。 (5) 行的次序可以任意交換。 (6) 列具有原子性,即每一
5、列值是不可分的數(shù)據(jù)項5 關(guān)系模式 關(guān)系模式是對關(guān)系的描述,可以理解為表的結(jié)構(gòu)定義。 關(guān)系實際上就是關(guān)系模式在某一時刻的狀態(tài)或內(nèi)容。也就是說,關(guān)系模式是型,關(guān)系是它的值。 6 關(guān)系數(shù)據(jù)庫 在關(guān)系模型中,實體以及實體間的聯(lián)系都是用關(guān)系來表示。在一個給定應用中,所有實體及實體之間聯(lián)系的集合構(gòu)成一個關(guān)系數(shù)據(jù)庫。關(guān)系數(shù)據(jù)庫也有型和值之分。 2.1.2 關(guān)系操作關(guān)系操作 關(guān)系模型給出了關(guān)系操作的能力,但不對具體的RDBMS給出具體的語法要求。關(guān)系操作語言靈活方便,表達能力和功能強大。關(guān)系模型的數(shù)據(jù)操作采用集合操作方式,即操作對象和結(jié)果都是集合。 關(guān)系模型中常用的關(guān)系操作包括數(shù)據(jù)查詢、數(shù)據(jù)維護和數(shù)據(jù)控制三大
6、功能。數(shù)據(jù)查詢指數(shù)據(jù)檢索、統(tǒng)計、排序等功能;數(shù)據(jù)維護指數(shù)據(jù)的增加、刪除、修改等數(shù)據(jù)的更新功能;數(shù)據(jù)控制是為了保證數(shù)據(jù)的安全性和完整性而采用的數(shù)據(jù)存儲控制及并發(fā)控制等功能。 2.1.3 關(guān)系的完整性關(guān)系的完整性 1 實體完整性 現(xiàn)實世界中的實體是可區(qū)分的,即它們具有某種唯一性標識。相應地,關(guān)系模型中以主鍵(主關(guān)鍵字)作為唯一性標識。主鍵中的屬性即主屬性不能取空值。所謂空值就是“不知道”或“無意義”的值。2 參照完整性 現(xiàn)實世界中的實體之間往往存在某種聯(lián)系,在關(guān)系模型中實體及實體間的聯(lián)系都是用關(guān)系來描述的。這樣就自然存在著關(guān)系與關(guān)系間的引用。 3. 用戶定義的完整性 用戶定義的完整性是針對某一具體
7、關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應用所涉及的數(shù)據(jù)必須滿足的語義要求。例如:某個屬性的取值不能為空,學生考試的成績?nèi)≈捣秶?到100之間。 2.2 SQL語言語言 SQL全稱是“Structured Query Language”,即結(jié)構(gòu)化查詢語言,它目前是關(guān)系數(shù)據(jù)庫的標準語言,它是在1974年由Boyce和Chamberlin提出的。經(jīng)過不斷修改、擴充和完善,SQL語言最終發(fā)展成為關(guān)系數(shù)據(jù)庫的標準語言。由于它功能豐富、語言簡潔、易學易用,所以深受用戶和計算機工業(yè)界的歡迎,被各計算機公司和軟件公司廣泛采用。 SQL標準的影響超出了數(shù)據(jù)庫領(lǐng)域,SQL成為國際標準后,它在數(shù)據(jù)庫以外的其他領(lǐng)域也
8、得到了重視和采用。在未來一段相當長的時間,SQL將是數(shù)據(jù)庫語言領(lǐng)域中的一個主流語言。 2.2.1 SQL概述及特點概述及特點 1. SQL概述 SQL是一種結(jié)構(gòu)化查詢語言,其功能并不象名稱所顯示的那樣僅僅是查詢,而是一個通用的、功能強大的關(guān)系數(shù)據(jù)庫語言。SQL從主要功能上可以分為4個部分:數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制。它是一個綜合的、通用的關(guān)系數(shù)據(jù)庫查詢語言。它的特點如下: (1) 功能一體化 (2) 高度非過程化 (3) 以同一種語法結(jié)構(gòu)提供兩種使用方式 (4) 語言簡潔,易學易用 2. SQL語言的基本概念 SQL支持三級模式結(jié)構(gòu),外模式對應于視圖和部分基本表,模式對應于基本表,
9、內(nèi)模式對應于存儲文件。 基本表是獨立存在的表,一個關(guān)系就是一個表。基本表是按數(shù)據(jù)全局邏輯模式建立的。全體基本表構(gòu)成了數(shù)據(jù)庫的模式。一個SQL模式(Schema)是表和約束的集合。 視圖是從基本表或其他視圖中導出的表,它本身不獨立存儲在數(shù)據(jù)庫中,也就是說數(shù)據(jù)庫中只存放視圖的定義而不存放視圖的數(shù)據(jù),這些數(shù)據(jù)仍存放在導出視圖的基本表中。因此,視圖是一個虛表。 2.2.2 SQL數(shù)據(jù)定義數(shù)據(jù)定義 SQL的數(shù)據(jù)定義功能包括定義表、定義視圖、定義索引和定義數(shù)據(jù)庫。SQL的數(shù)據(jù)定義語句見下表。 操作對操作對象象創(chuàng)建語句創(chuàng)建語句刪除語句刪除語句修改語句修改語句基本表CREATE TABLEDROP TABLE
10、ALTER TABLE索引CREATE INDEXDROP INDEXALTER INDEX視圖CREATE VIEWDROP VIEWALTER VIEW數(shù)據(jù)庫CREATE DATABASEDROP DATABASEALTER DATABASE 1. 基本表的定義和維護 SQL基本表的定義和維護功能包括表的定義、修改和刪除。(1) 定義基本表( CREATE TABLE) 例2-2 建立一個“學生”表,它由學號、姓名、性別、年齡、所在系五個屬性組成,年齡是整型數(shù)據(jù),其它為字符型。 CREATE TABLE 學生 (學號 CHAR(5), 姓名 CHAR(20), 年齡 INT, 性別 CHA
11、R(2), 所在系 CHAR(20), ) (2)修改基本表( ALTER TABLE) 例2-6 刪除“學生”表中“入學時間”列。 ALTER TABLE 學生 DROP COLUMN 入學時間; (3) 刪除基本表 例2-7 刪除學生表 DROP TABLE學生 2. 索引的定義和維護 當你閱讀一本厚書時,如果你想快速找到特定的內(nèi)容,你就需要查看目錄,找到你所關(guān)心的內(nèi)容在書中的準確位置頁碼,然后直接翻到這個位置。索引對于表,就相當于書的目錄。索引可以提高數(shù)據(jù)查詢速度。 可以對頻繁查詢的表增加索引。只有按有索引的列查詢,索引才有作用。 (1)建立索引 (CREATE INDEX ) 例2-8
12、 為學生表建立索引,按學號升序建唯一索引。 CREATE UNIQUE INDEX Stusno ON 學生 (學號)(2) 刪除索引 ( DROP INDEX ) 例2-9 DROP INDEX 學生. Stusno 2.2.3 SQL數(shù)據(jù)查詢數(shù)據(jù)查詢 數(shù)據(jù)庫查詢是數(shù)據(jù)庫的核心操作,查詢就是從數(shù)據(jù)庫中挑選、提取所需要的數(shù)據(jù)。SQL提供了SELECT語句進行數(shù)據(jù)庫的查詢,該語句使用方式靈活、功能強大。 SELECT語句的語法格式為:SELECT ALL | DISTINCT,. FROM , . WHERE GROUP BY HAVING ORDER BY ASC|DESC; 1. 簡單查詢
13、簡單查詢是指從一個表中進行查詢,也叫單表查詢。如選擇一個表中的某些列、某些行。(1) 查詢指定列例2-10 查詢?nèi)w學生的姓名與學號。 學生表中有很多列:學號,姓名,年齡,性別,所在系,而下列語句只選擇學號和姓名兩列,即查詢的結(jié)果是一個只包含兩列的新關(guān)系。 SELECT 學號,姓名 FROM 學生;(2) 查詢?nèi)苛欣?-11 查詢學生表的全部列: SELECT * FROM 學生 也可以寫為: SELECT學號,姓名,年齡,性別,所在系(3) 查詢經(jīng)過計算的值 SELECT子句可以包含表達式,運算對象可以是常量或?qū)傩?。?-12 查詢5年之后學生的年齡。假如數(shù)據(jù)庫中學生的年齡是今年的年齡。
14、SELECT 學號,姓名,年齡+5 FROM 學生(4) 消除取值重復的行 一個表中兩個本來不完全相同的行,選擇部分列后,可能完全相同了。例2-13 查詢選修了課程的學號。 SELECT 學號 FROM 選課 如果要去掉重復行,必須指定短語DISTINCT: SELECT DISTINCT 學號 FROM 選課 取消了重復行,結(jié)果就是選了課的學生學號。 (5) 查詢滿足條件的行 WHERE子句通過條件表達式描述表中行的選擇條件。DBMS系統(tǒng)根據(jù)選擇條件掃描表中的每一行,把不符合條件的行篩選掉。WHERE子句常用的查詢條件,如下表所示: 查詢條件查詢條件常用謂詞常用謂詞比較=,=,=,! ,!;
15、NOT + 上述比較運算符確定范圍B E T W E E N A N D , N O T BETWEEN AND確定集合IN,NOT IN字符匹配LIKE,NOT LIKE空 值IS NULL,IS NOT NULL多重條件AND,OR 比較 例2-14 查詢信息系學生的名單 SELECT 姓名 FROM 學生 WHERE 所在系=信息系例2-15 查詢所有20歲以下的學生姓名和年齡 SELECT 姓名,年齡 FROM 學生 WHERE 年齡20例2-16 查詢有成績不及格的學生的學號 SELECT DISTINCT 學號 FROM 選課 WHERE 成績60 確定范圍例2-17 查詢年齡在2
16、0到23歲(包括20和23)之間的學生姓名、年齡、所在系。 SELECT 姓名,年齡,所在系 FROM 學生 WHERE 年齡BETWEEN 20 AND 23 確定集合例2-18 查詢數(shù)學系或化學系學生的姓名、性別、所在系。 SELECT 姓名,性別,所在系 FROM 學生 WHERE 所在系 IN (數(shù)學系,化學系) 字符串的匹配。 例2-19 查詢姓劉的學生的姓名、性別、所在系。 SELECT 姓名,性別,所在系 FROM 學生 WHERE姓名 LIKE 劉% 涉及空值的查詢例2-22 查詢選修了課程而沒參加考試的學生名單及課程號。 SELECT 學號,課程號 FROM 選課 WHERE
17、成績 IS NULL 多重條件查詢 如果查詢條件多于兩個,則要使用邏輯運算符AND和OR連接多個條件,AND的優(yōu)先級高于OR,但可使用括號改變運算順序。例2-23 查詢計算機系姓趙的學生。 SELECT 姓名 FROM 學生 WHERE所在系=計算機系 AND 姓名 LIKE 趙%(6) 對查詢結(jié)果排序 如果沒有指定查詢結(jié)果的顯示順序,DBMS通常按其數(shù)據(jù)錄入的先后順序(物理存儲順序)輸出查詢結(jié)果。用戶也可以用ORDER BY子句指定按照一個或多個屬性列的升序(ASC)或降序(DESC)重新排列查詢結(jié)果,其中升序ASC為缺省值。例2-24 查詢選修了3號課程的學生的學號及其成績,查詢結(jié)果按成績
18、的降序排列。 SELECT 學號,成績 FROM 選課 WHERE 課程號3 ORDER BY 成績 DESC (7) 使用集合函數(shù) 為了進一步方便用戶,增強檢索功能,SQL提供了許多集函數(shù),常用的集函數(shù)見下表。函數(shù)名函數(shù)名意義意義COUNT(DISTINCT | ALL*)統(tǒng)計記錄個數(shù)COUNT(DISTINCT | ALL 列名)統(tǒng)計一列中值的個數(shù)SUM(DISTINCT | ALL 列名)計算一列值的總和(此列必須是數(shù)值型)AVG(DISTINCT | ALL 列名)計算一列值的平均值(此列必須是數(shù)值型)MAX(DISTINCT | ALL 列名)求一列值中的最大值MIN(DISTINC
19、T | ALL 列名)求一列值中的最大值例2-25 查詢學生總?cè)藬?shù)。 SELECT COUNT(*) FROM 學生例2-26 查詢選修了課程的學生人數(shù)。 SELECT COUNT(DISTINCT 學號) FROM 選課 學生每選修一門課,在選課中都有一條相應的記錄,而一個學生一般都要選修多門課,為避免重復計算學生人數(shù),必須在COUNT函數(shù)中用DISTINCT限定詞。(8) 對查詢結(jié)果分組 GROUP BY子句可以將查詢結(jié)果表的各行按一列或多列的值分組,值相等的為一組。對查詢結(jié)果分組的目的是為了細化集函數(shù)的作用對象。如果未對查詢結(jié)果分組,集函數(shù)將作用于整個查詢結(jié)果,即整個查詢結(jié)果只有一個函數(shù)
20、值,如上面的例題,否則,集函數(shù)將作用于每一個組,即每一組都有一個函數(shù)值。例2-28 查詢各個課程號與相應的選課人數(shù)。 SELECT 課程號,COUNT(學號) FROM 選課 GROUP BY 課程號 該SELECT語句對課程表按課程號的取值進行分組,所有具有相同課程號的行為一組,然后對每一組作用集函數(shù)COUNT以求得該組的學生人數(shù)。 2. 連接查詢 一個數(shù)據(jù)庫中的多個表之間一般都存在某種內(nèi)在聯(lián)系,它們共同提供有用的信息。前面的查詢都是針對一個表進行的。若一個查詢同時涉及兩個以上的表,則稱之為連接查詢。連接查詢實際上是關(guān)系數(shù)據(jù)庫中最主要的查詢,主要包括等值連接查詢、非等值連接查詢、自身連接查詢
21、、外連接查詢和復合條件連接查詢。 例2-31 查詢每個學生及其選修課程的情況。 學生選課情況存放在選課表中,所以本查詢實際上同時涉及學生表和選課表兩個表中的數(shù)據(jù)。這兩個表之間的聯(lián)系是通過兩個表都具有的公共屬性學號實現(xiàn)的。要查詢學生及其選修課程的情況就必須將這兩個表中學號相同的元組連接起來。 這是一個等值連接。完成本查詢的SQL語句為: SELECT 學生.*,選課.* FROM 學生,選課 WHERE 學生.學號選課.學號3. 嵌套查詢 在SQL語言中,一個SELECTFROMWHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查
22、詢或子查詢。 在嵌套查詢中,上層的查詢塊又稱為外層查詢或父查詢或主查詢,下層查詢塊又稱為內(nèi)層查詢或子查詢。SQL語言允許多層嵌套查詢。即一個子查詢中還可以嵌套其它子查詢。 嵌套查詢使得可以用一系列簡單查詢構(gòu)成復雜的查詢,從而明顯地增強了SQL的查詢能力。(1) 帶有IN謂詞的子查詢 帶有IN渭詞的子查詢是指父查詢與子查詢之間用IN進行連接,判斷某個屬性列值是否在子查詢的結(jié)果中。由于在嵌套查詢中,子查詢的結(jié)果往往是一個集合,所以謂詞IN是嵌套查詢中最經(jīng)常使用的謂詞。例2-32 查詢選修了“數(shù)學”課的學生姓名。 學生名和課程名分別在“學生”和“課程”表中,因此不能通過簡單的查詢一個表而得到結(jié)果。實
23、際上連接學生和課程的是“選課”表,因此這個查詢涉及到三個表:學生、課程、選課。查詢步驟如下: 在課程表中查詢“數(shù)學”課的課程號。 在選課表中找到選修了上一步得到的課程號的課程的學生學號。 在學生表中找到學號包含在上一步所得到的學號集合中的學生姓名。 SELECT 學號,姓名 FROM 學生 WHERE 學號 IN (SELECT 學號 FROM 選課 WHERE 課程號 IN (SELECT 課程號 FROM 課程 WHERE 課程=數(shù)學) (2) 帶有比較運算符的子查詢 帶有比較運算符的子查詢是指父查詢與子查詢之間用比較運算符進行連接。當用戶能確切知道內(nèi)層查詢返回的是單值時,可以用、2或等比
24、較運算符。例2-33 查詢與“劉剛”同一個系的學生。這個查詢分兩步: 首先在學生表找到“劉剛”所在的系。 然后在學生表中查詢所在系與上一不的查詢結(jié)果相等的學生名單。SELECT 姓名FROM 學生WHERE 所在系=(SELECT所在系 FROM 學生 WHERE 姓名=劉剛) 2.2.4 SQL數(shù)據(jù)操縱數(shù)據(jù)操縱 在對數(shù)據(jù)庫進行操作時,除了經(jīng)常查詢數(shù)據(jù)庫外,還要更新數(shù)據(jù)。SQL中數(shù)據(jù)更新包括插入數(shù)據(jù)(INSERT)、修改數(shù)據(jù)(UPDATE)和刪除數(shù)據(jù)(DELETE)三條語句。1. 插入語句(INSERT INTO )例2-34 將一個新學生記錄(學號:95005;姓名:陳??;性別:男;所在系:
25、計算機;年齡:18歲)插入學生表中。 INSERT INTO 學生 VALUES(95020,陳俊,男,18,計算機系); 2. 刪除語句 (DELETE )例2-35 刪除學號為95001的學生記錄。 DELETE FROM 學生 WHERE 學號=95001;3. 修改語句(UPDATE )例2-36 將學號為95001的學生年齡改為22歲。 UPDATE 學生 SET 年齡=22 WHERE 學號=95001 2.2.5 SQL數(shù)據(jù)控制數(shù)據(jù)控制 這里所討論的數(shù)據(jù)控制主要是指SQL語言的安全性控制功能,通過對數(shù)據(jù)庫用戶的使用權(quán)限加以限制而保證數(shù)據(jù)安全的重要措施。SQL語言的的數(shù)據(jù)控制語句包
26、括授權(quán)(Grant)、收權(quán)或刪除權(quán)限(Revoke)、拒絕訪問(Deny)三種,權(quán)限的設(shè)置對象可以是數(shù)據(jù)庫用戶或用戶組。1. 授權(quán) 例2-37 將查詢成績的權(quán)限授予所有人。 GRANT SELECT ON TABLE 成績 TO PUBLIC2. 收權(quán)語句 數(shù)據(jù)庫管理員DBA、數(shù)據(jù)庫擁有者DBO或數(shù)據(jù)庫對象的擁有者DBOO可以通過REVOKE語句將其他用戶的數(shù)據(jù)操作權(quán)限收回。 例2-38 將用戶wp修改學生學號的權(quán)限收回。 REVOKE UPDATE(學號) ON 學生 FROM wp 2.3 關(guān)系數(shù)據(jù)理論關(guān)系數(shù)據(jù)理論 針對一個具體的問題,應該如何構(gòu)造一個適合于它的數(shù)據(jù)模式。這是數(shù)據(jù)庫設(shè)計問題
27、,確切地講是數(shù)據(jù)庫邏輯設(shè)計問題。 關(guān)系模型有嚴格的數(shù)學理論基礎(chǔ),基于這種理論上的優(yōu)勢,關(guān)系模型可以設(shè)計的更加科學,關(guān)系數(shù)據(jù)庫中的問題可以更好地解決。關(guān)系數(shù)據(jù)庫規(guī)范化理論就是數(shù)據(jù)庫邏輯設(shè)計工具。關(guān)系數(shù)據(jù)庫的規(guī)范化理論就是解決如何設(shè)計出合理的關(guān)系數(shù)據(jù)庫模式,也就是一個數(shù)據(jù)庫中要定義哪些表,每個表有哪些屬性,表之間有哪些聯(lián)系,而盡量地減少數(shù)據(jù)冗余,消除插入、刪除等存在的問題。2.3.1 關(guān)系模式可能存在的問題關(guān)系模式可能存在的問題 例如,要設(shè)計一個教學管理數(shù)據(jù)庫,希望在該數(shù)據(jù)庫中保存學生的學號、姓名、性別、年齡、系名、系主任和該學生選修的課程及成績信息。若據(jù)此設(shè)計一個關(guān)系保存所有的數(shù)據(jù),關(guān)系模式為:
28、 教學(學號,姓名,性別,年齡,系名,系主任,課程名,成績) 這個關(guān)系模式存在以下的問題: 數(shù)據(jù)冗余大 插入異常 刪除異常。 更新異常 由于上述的問題,它是一個不合理的設(shè)計。一個合理的設(shè)計應該盡量減少以上的問題。只有找到問題存在的原因,才能找到解決辦法。那么出現(xiàn)上述問題的原因是什么呢?這是因為這個關(guān)系模式中的數(shù)據(jù)之間的依賴關(guān)系所造成的。如果把這個單一的關(guān)系模式,分解成如下三個關(guān)系模式: 學生(學號,姓名,性別,年齡,所在系); 系(系名,系主任); 選課(學號,課程名,成績) 2.3.2 函數(shù)依賴及規(guī)范化函數(shù)依賴及規(guī)范化 為了使數(shù)據(jù)庫模式的設(shè)計更合理,人們研究了規(guī)范化理論。而函數(shù)依賴理論是關(guān)系
29、規(guī)范化的理論基礎(chǔ)。函數(shù)依賴反映了同一關(guān)系中屬性間一一對應的約束。 1. 關(guān)系模式的簡化表示法 一般把關(guān)系模式看做一個三元組: R(U,F(xiàn)) 其中,R是關(guān)系名,U是一組屬性,F(xiàn)是屬性組U上的一組數(shù)據(jù)依賴關(guān)系的集合。當且僅當U上的一個關(guān)系 r 滿足 F 時,r稱為關(guān)系模式R(U,F(xiàn))的一個關(guān)系。 2. 函數(shù)依賴 函數(shù)依賴是數(shù)據(jù)依賴的一種,函數(shù)依賴反映了同一關(guān)系中屬性間的一一對應約束。它是現(xiàn)實世界屬性間相互聯(lián)系的抽象,是數(shù)據(jù)內(nèi)在的性質(zhì),是語義的體現(xiàn)。它是數(shù)據(jù)庫規(guī)范化理論的基礎(chǔ)。 函數(shù)依賴普遍存在于現(xiàn)實生活中。例如在描述學生的關(guān)系中,可能的屬性有學號,姓名,所在系等。由于一個學號只對應于一個學生,一個
30、學生只能屬于一個系,因此學號確定之后,該學生的姓名和所在系也唯一的確定了。類似于自變量確定了,函數(shù)值也唯一確定了。起決定性的屬性相當于自變量。函數(shù)依賴記為:學號姓名,學號所在系。 現(xiàn)在討論一個具體的關(guān)系模式。例如,要設(shè)計一個教學管理數(shù)據(jù)庫,希望該數(shù)據(jù)庫中包括的信息有學生學號、姓名、系名、系主任姓名,以及學生學習的課程和成績。于是得到一組屬性: U=學號,姓名,系名,系主任,課程名,成績 根據(jù)經(jīng)驗得知: 一個學號對應一個學生,即一個學號對應一個姓名,但可以有多個學生重名; 一個系有若干學生,但一個學生只屬于一個系; 一個系只有一名(正職)負責人; 一個學生可選修多門課程,每門課程有若干學生選修;
31、 學生學習每一門課程有一個成績; 于是得到屬性組上的一組函數(shù)依賴: F=學號姓名,學號系名,系名系主任,(學號,課程名)成績 定義:設(shè)R(U)是屬性集U上的關(guān)系模式。X,Y是U的子集。若對于R(U)的任意一個可能的關(guān)系r(一個滿足約束條件的數(shù)據(jù)組成的表),r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱X函數(shù)確定Y或Y函數(shù)依賴于X,記作XY。 定義:在R(U)中,,如果XY,YZ,且(Y X),Y X,則稱Z對X傳遞函數(shù)依賴。例如,在教學關(guān)系模式中,學號系名,系名系主任,所以系主任對學號傳遞依賴。 3. 范式 關(guān)系數(shù)據(jù)庫中的關(guān)系是要滿足一定要求的。滿足不同程度要求的為不同的
32、范式。范式是滿足一定函數(shù)依賴的關(guān)系模式的集合。有多種范式:第一范式、第二范式、第三范式、BCN范式等。滿足最低要求的叫第一范式,簡稱1NF。在滿足第一范式的條件下,滿足進一步條件的為第二范式,簡稱2NF。其余依此類推。顯然各種范式之間存在關(guān)系: 1NF2NF 3NF BCNF 4NF 5NF 一個低一級的范式模式,通過模式分解可以轉(zhuǎn)換為若干個高一級范式的模式集合,這個過程叫規(guī)范化。 (1) 第一范式(1NF) 定義:如果一個關(guān)系模式R的所有屬性都是簡單屬性,即每個屬性都是不可再分的基本數(shù)據(jù)項,則稱R屬于第一范式,記作 R 1NF。 例如,教學模式中的所有屬性都是不可再分的簡單屬性,即: 教學(
33、學號,姓名,系名,系主任,課程名,成績) 1NF (2 ) 第二范式(2NF) 定義:若一個關(guān)系模式RlNF,且每一個非主屬性完全函數(shù)依賴于關(guān)鍵字,則R2NF。 將教學模式分為以下兩個模式: 學生_系(學號,姓名,系,系主任); 選課(學號,課程名,成績) 在“學生_系”關(guān)系中,“學號”是關(guān)鍵字,其它非主屬性都完全依賴于關(guān)鍵字,“選課”關(guān)系中,(學號,課程名)是關(guān)鍵字,非主屬性也完全依賴于關(guān)鍵字,因此兩個關(guān)系中非主屬都完全函數(shù)依賴于關(guān)鍵字,服從2NF,即: 學生_系2NF,選課2NF。 (3 ) 第三范式(3NF) 定義:若關(guān)系模式R是第二范式,且沒有一個非主屬性傳遞函數(shù)依賴關(guān)鍵字,則R3NF。R3NF,則非主屬性對主屬性既不部分函數(shù)依賴于關(guān)鍵字,也不傳遞函數(shù)依賴于關(guān)鍵字。 考察“學生_系”關(guān)系,可以看出:學號系名,系名系主任,即“系主任”傳遞依賴于“學號”?!皩W號”是關(guān)鍵字,而“系主任”是非主屬性,它們
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題開題報告:當代文化發(fā)展繁榮與文化立法的關(guān)系研究
- 課題開題報告:傳統(tǒng)工藝精神與設(shè)計專業(yè)學生技能培養(yǎng)
- 課題開題報告:殘疾人高等教育專業(yè)設(shè)置優(yōu)化改革研究
- 健康檢查協(xié)議書
- 鎧裝膠管企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 園林景觀再生塑料元素行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報告
- 醫(yī)學級美白面霜套裝行業(yè)跨境出海戰(zhàn)略研究報告
- 酸奶發(fā)酵劑企業(yè)縣域市場拓展與下沉戰(zhàn)略研究報告
- 文具存放用具企業(yè)ESG實踐與創(chuàng)新戰(zhàn)略研究報告
- 二零二五年度餐飲行業(yè)保潔臨時用工管理協(xié)議
- 2025年天翼云解決方案架構(gòu)師認證考試指導題庫-上(單選題)
- 行為規(guī)范教育中學校長在國旗下講話:嚴格要求自己規(guī)范自己的行為
- 2024年12月廣東廣州市港務局直屬事業(yè)單位引進緊缺專業(yè)人才8人筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 七下綜合世界真奇妙-共享“地球村”
- DBJ50-T-100-2022 建筑邊坡工程施工質(zhì)量驗收標準
- 2025年寧夏工商職業(yè)技術(shù)學院高職單招職業(yè)適應性測試近5年常考版參考題庫含答案解析
- 2025年信陽職業(yè)技術(shù)學院高職單招職業(yè)技能測試近5年??及鎱⒖碱}庫含答案解析
- DB11-T 1004-2023 房屋建筑使用安全檢查評定技術(shù)規(guī)程
- 《藝術(shù)與傳播》課件
- 烹飪安全知識培訓課件
- 2024年廣東職業(yè)技術(shù)學院高職單招語文歷年參考題庫含答案解析
評論
0/150
提交評論