版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、教材:數(shù)據(jù)庫技術(shù)及應(yīng)用 2006年4月寧可、吳菁、胡海編著本章要點(diǎn) 關(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概述及特點(diǎn) 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ù)學(xué)家稱為關(guān)系。關(guān)系數(shù)據(jù)庫中還定義了關(guān)系操作和完整性約束,關(guān)系操作就是對表中的數(shù)據(jù)的處理、查詢,完整性約束就是表中的數(shù)據(jù)要滿足的條件,這些條件由數(shù)據(jù)庫系統(tǒng)自動維護(hù),產(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)系的定義 在用戶觀點(diǎn)下,關(guān)系模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表。二維表的每一列稱為屬性。每個屬性有一個取值范圍,稱為值域。每個屬性對應(yīng)一個值域。下面是二維表的一個實例。 學(xué)號學(xué)號姓名姓名性性別別1張
3、三男2李四男2 關(guān)系中的基本名詞(1) 關(guān)鍵字 能唯一標(biāo)識一行記錄或元組的一個或一組屬性。(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) 視圖表 視圖表是由基本表或其它視圖表導(dǎo)出的表,它是為數(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)系來表示。在一個給定應(yīng)用中,所有實體及實體之間聯(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)系操作語言靈活方便,表達(dá)能力和功能強(qiáng)大。關(guān)系模型的數(shù)據(jù)操作采用集合操作方式,即操作對象和結(jié)果都是集合。 關(guān)系模型中常用的關(guān)系操作包括數(shù)據(jù)查詢、數(shù)據(jù)維護(hù)和數(shù)據(jù)控制三大
6、功能。數(shù)據(jù)查詢指數(shù)據(jù)檢索、統(tǒng)計、排序等功能;數(shù)據(jù)維護(hù)指數(shù)據(jù)的增加、刪除、修改等數(shù)據(jù)的更新功能;數(shù)據(jù)控制是為了保證數(shù)據(jù)的安全性和完整性而采用的數(shù)據(jù)存儲控制及并發(fā)控制等功能。 2.1.3 關(guān)系的完整性關(guān)系的完整性 1 實體完整性 現(xiàn)實世界中的實體是可區(qū)分的,即它們具有某種唯一性標(biāo)識。相應(yīng)地,關(guān)系模型中以主鍵(主關(guān)鍵字)作為唯一性標(biāo)識。主鍵中的屬性即主屬性不能取空值。所謂空值就是“不知道”或“無意義”的值。2 參照完整性 現(xiàn)實世界中的實體之間往往存在某種聯(lián)系,在關(guān)系模型中實體及實體間的聯(lián)系都是用關(guān)系來描述的。這樣就自然存在著關(guān)系與關(guān)系間的引用。 3. 用戶定義的完整性 用戶定義的完整性是針對某一具體
7、關(guān)系數(shù)據(jù)庫的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。例如:某個屬性的取值不能為空,學(xué)生考試的成績?nèi)≈捣秶?到100之間。 2.2 SQL語言語言 SQL全稱是“Structured Query Language”,即結(jié)構(gòu)化查詢語言,它目前是關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言,它是在1974年由Boyce和Chamberlin提出的。經(jīng)過不斷修改、擴(kuò)充和完善,SQL語言最終發(fā)展成為關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)語言。由于它功能豐富、語言簡潔、易學(xué)易用,所以深受用戶和計算機(jī)工業(yè)界的歡迎,被各計算機(jī)公司和軟件公司廣泛采用。 SQL標(biāo)準(zhǔn)的影響超出了數(shù)據(jù)庫領(lǐng)域,SQL成為國際標(biāo)準(zhǔn)后,它在數(shù)據(jù)庫以外的其他領(lǐng)域也
8、得到了重視和采用。在未來一段相當(dāng)長的時間,SQL將是數(shù)據(jù)庫語言領(lǐng)域中的一個主流語言。 2.2.1 SQL概述及特點(diǎn)概述及特點(diǎn) 1. SQL概述 SQL是一種結(jié)構(gòu)化查詢語言,其功能并不象名稱所顯示的那樣僅僅是查詢,而是一個通用的、功能強(qiáng)大的關(guān)系數(shù)據(jù)庫語言。SQL從主要功能上可以分為4個部分:數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制。它是一個綜合的、通用的關(guān)系數(shù)據(jù)庫查詢語言。它的特點(diǎn)如下: (1) 功能一體化 (2) 高度非過程化 (3) 以同一種語法結(jié)構(gòu)提供兩種使用方式 (4) 語言簡潔,易學(xué)易用 2. SQL語言的基本概念 SQL支持三級模式結(jié)構(gòu),外模式對應(yīng)于視圖和部分基本表,模式對應(yīng)于基本表,
9、內(nèi)模式對應(yīng)于存儲文件。 基本表是獨(dú)立存在的表,一個關(guān)系就是一個表?;颈硎前磾?shù)據(jù)全局邏輯模式建立的。全體基本表構(gòu)成了數(shù)據(jù)庫的模式。一個SQL模式(Schema)是表和約束的集合。 視圖是從基本表或其他視圖中導(dǎo)出的表,它本身不獨(dú)立存儲在數(shù)據(jù)庫中,也就是說數(shù)據(jù)庫中只存放視圖的定義而不存放視圖的數(shù)據(jù),這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中。因此,視圖是一個虛表。 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. 基本表的定義和維護(hù) SQL基本表的定義和維護(hù)功能包括表的定義、修改和刪除。(1) 定義基本表( CREATE TABLE) 例2-2 建立一個“學(xué)生”表,它由學(xué)號、姓名、性別、年齡、所在系五個屬性組成,年齡是整型數(shù)據(jù),其它為字符型。 CREATE TABLE 學(xué)生 (學(xué)號 CHAR(5), 姓名 CHAR(20), 年齡 INT, 性別 CHA
11、R(2), 所在系 CHAR(20), ) (2)修改基本表( ALTER TABLE) 例2-6 刪除“學(xué)生”表中“入學(xué)時間”列。 ALTER TABLE 學(xué)生 DROP COLUMN 入學(xué)時間; (3) 刪除基本表 例2-7 刪除學(xué)生表 DROP TABLE學(xué)生 2. 索引的定義和維護(hù) 當(dāng)你閱讀一本厚書時,如果你想快速找到特定的內(nèi)容,你就需要查看目錄,找到你所關(guān)心的內(nèi)容在書中的準(zhǔn)確位置頁碼,然后直接翻到這個位置。索引對于表,就相當(dāng)于書的目錄。索引可以提高數(shù)據(jù)查詢速度。 可以對頻繁查詢的表增加索引。只有按有索引的列查詢,索引才有作用。 (1)建立索引 (CREATE INDEX ) 例2-8
12、 為學(xué)生表建立索引,按學(xué)號升序建唯一索引。 CREATE UNIQUE INDEX Stusno ON 學(xué)生 (學(xué)號)(2) 刪除索引 ( DROP INDEX ) 例2-9 DROP INDEX 學(xué)生. Stusno 2.2.3 SQL數(shù)據(jù)查詢數(shù)據(jù)查詢 數(shù)據(jù)庫查詢是數(shù)據(jù)庫的核心操作,查詢就是從數(shù)據(jù)庫中挑選、提取所需要的數(shù)據(jù)。SQL提供了SELECT語句進(jìn)行數(shù)據(jù)庫的查詢,該語句使用方式靈活、功能強(qiáng)大。 SELECT語句的語法格式為:SELECT ALL | DISTINCT,. FROM , . WHERE GROUP BY HAVING ORDER BY ASC|DESC; 1. 簡單查詢
13、簡單查詢是指從一個表中進(jìn)行查詢,也叫單表查詢。如選擇一個表中的某些列、某些行。(1) 查詢指定列例2-10 查詢?nèi)w學(xué)生的姓名與學(xué)號。 學(xué)生表中有很多列:學(xué)號,姓名,年齡,性別,所在系,而下列語句只選擇學(xué)號和姓名兩列,即查詢的結(jié)果是一個只包含兩列的新關(guān)系。 SELECT 學(xué)號,姓名 FROM 學(xué)生;(2) 查詢?nèi)苛欣?-11 查詢學(xué)生表的全部列: SELECT * FROM 學(xué)生 也可以寫為: SELECT學(xué)號,姓名,年齡,性別,所在系(3) 查詢經(jīng)過計算的值 SELECT子句可以包含表達(dá)式,運(yùn)算對象可以是常量或?qū)傩?。?-12 查詢5年之后學(xué)生的年齡。假如數(shù)據(jù)庫中學(xué)生的年齡是今年的年齡。
14、SELECT 學(xué)號,姓名,年齡+5 FROM 學(xué)生(4) 消除取值重復(fù)的行 一個表中兩個本來不完全相同的行,選擇部分列后,可能完全相同了。例2-13 查詢選修了課程的學(xué)號。 SELECT 學(xué)號 FROM 選課 如果要去掉重復(fù)行,必須指定短語DISTINCT: SELECT DISTINCT 學(xué)號 FROM 選課 取消了重復(fù)行,結(jié)果就是選了課的學(xué)生學(xué)號。 (5) 查詢滿足條件的行 WHERE子句通過條件表達(dá)式描述表中行的選擇條件。DBMS系統(tǒng)根據(jù)選擇條件掃描表中的每一行,把不符合條件的行篩選掉。WHERE子句常用的查詢條件,如下表所示: 查詢條件查詢條件常用謂詞常用謂詞比較=,=,=,! ,!;
15、NOT + 上述比較運(yùn)算符確定范圍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 查詢信息系學(xué)生的名單 SELECT 姓名 FROM 學(xué)生 WHERE 所在系=信息系例2-15 查詢所有20歲以下的學(xué)生姓名和年齡 SELECT 姓名,年齡 FROM 學(xué)生 WHERE 年齡20例2-16 查詢有成績不及格的學(xué)生的學(xué)號 SELECT DISTINCT 學(xué)號 FROM 選課 WHERE 成績60 確定范圍例2-17 查詢年齡在2
16、0到23歲(包括20和23)之間的學(xué)生姓名、年齡、所在系。 SELECT 姓名,年齡,所在系 FROM 學(xué)生 WHERE 年齡BETWEEN 20 AND 23 確定集合例2-18 查詢數(shù)學(xué)系或化學(xué)系學(xué)生的姓名、性別、所在系。 SELECT 姓名,性別,所在系 FROM 學(xué)生 WHERE 所在系 IN (數(shù)學(xué)系,化學(xué)系) 字符串的匹配。 例2-19 查詢姓劉的學(xué)生的姓名、性別、所在系。 SELECT 姓名,性別,所在系 FROM 學(xué)生 WHERE姓名 LIKE 劉% 涉及空值的查詢例2-22 查詢選修了課程而沒參加考試的學(xué)生名單及課程號。 SELECT 學(xué)號,課程號 FROM 選課 WHERE
17、成績 IS NULL 多重條件查詢 如果查詢條件多于兩個,則要使用邏輯運(yùn)算符AND和OR連接多個條件,AND的優(yōu)先級高于OR,但可使用括號改變運(yùn)算順序。例2-23 查詢計算機(jī)系姓趙的學(xué)生。 SELECT 姓名 FROM 學(xué)生 WHERE所在系=計算機(jī)系 AND 姓名 LIKE 趙%(6) 對查詢結(jié)果排序 如果沒有指定查詢結(jié)果的顯示順序,DBMS通常按其數(shù)據(jù)錄入的先后順序(物理存儲順序)輸出查詢結(jié)果。用戶也可以用ORDER BY子句指定按照一個或多個屬性列的升序(ASC)或降序(DESC)重新排列查詢結(jié)果,其中升序ASC為缺省值。例2-24 查詢選修了3號課程的學(xué)生的學(xué)號及其成績,查詢結(jié)果按成績
18、的降序排列。 SELECT 學(xué)號,成績 FROM 選課 WHERE 課程號3 ORDER BY 成績 DESC (7) 使用集合函數(shù) 為了進(jìn)一步方便用戶,增強(qiáng)檢索功能,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 查詢學(xué)生總?cè)藬?shù)。 SELECT COUNT(*) FROM 學(xué)生例2-26 查詢選修了課程的學(xué)生人數(shù)。 SELECT COUNT(DISTINCT 學(xué)號) FROM 選課 學(xué)生每選修一門課,在選課中都有一條相應(yīng)的記錄,而一個學(xué)生一般都要選修多門課,為避免重復(fù)計算學(xué)生人數(shù),必須在COUNT函數(shù)中用DISTINCT限定詞。(8) 對查詢結(jié)果分組 GROUP BY子句可以將查詢結(jié)果表的各行按一列或多列的值分組,值相等的為一組。對查詢結(jié)果分組的目的是為了細(xì)化集函數(shù)的作用對象。如果未對查詢結(jié)果分組,集函數(shù)將作用于整個查詢結(jié)果,即整個查詢結(jié)果只有一個函數(shù)
20、值,如上面的例題,否則,集函數(shù)將作用于每一個組,即每一組都有一個函數(shù)值。例2-28 查詢各個課程號與相應(yīng)的選課人數(shù)。 SELECT 課程號,COUNT(學(xué)號) FROM 選課 GROUP BY 課程號 該SELECT語句對課程表按課程號的取值進(jìn)行分組,所有具有相同課程號的行為一組,然后對每一組作用集函數(shù)COUNT以求得該組的學(xué)生人數(shù)。 2. 連接查詢 一個數(shù)據(jù)庫中的多個表之間一般都存在某種內(nèi)在聯(lián)系,它們共同提供有用的信息。前面的查詢都是針對一個表進(jìn)行的。若一個查詢同時涉及兩個以上的表,則稱之為連接查詢。連接查詢實際上是關(guān)系數(shù)據(jù)庫中最主要的查詢,主要包括等值連接查詢、非等值連接查詢、自身連接查詢
21、、外連接查詢和復(fù)合條件連接查詢。 例2-31 查詢每個學(xué)生及其選修課程的情況。 學(xué)生選課情況存放在選課表中,所以本查詢實際上同時涉及學(xué)生表和選課表兩個表中的數(shù)據(jù)。這兩個表之間的聯(lián)系是通過兩個表都具有的公共屬性學(xué)號實現(xiàn)的。要查詢學(xué)生及其選修課程的情況就必須將這兩個表中學(xué)號相同的元組連接起來。 這是一個等值連接。完成本查詢的SQL語句為: SELECT 學(xué)生.*,選課.* FROM 學(xué)生,選課 WHERE 學(xué)生.學(xué)號選課.學(xué)號3. 嵌套查詢 在SQL語言中,一個SELECTFROMWHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查
22、詢或子查詢。 在嵌套查詢中,上層的查詢塊又稱為外層查詢或父查詢或主查詢,下層查詢塊又稱為內(nèi)層查詢或子查詢。SQL語言允許多層嵌套查詢。即一個子查詢中還可以嵌套其它子查詢。 嵌套查詢使得可以用一系列簡單查詢構(gòu)成復(fù)雜的查詢,從而明顯地增強(qiáng)了SQL的查詢能力。(1) 帶有IN謂詞的子查詢 帶有IN渭詞的子查詢是指父查詢與子查詢之間用IN進(jìn)行連接,判斷某個屬性列值是否在子查詢的結(jié)果中。由于在嵌套查詢中,子查詢的結(jié)果往往是一個集合,所以謂詞IN是嵌套查詢中最經(jīng)常使用的謂詞。例2-32 查詢選修了“數(shù)學(xué)”課的學(xué)生姓名。 學(xué)生名和課程名分別在“學(xué)生”和“課程”表中,因此不能通過簡單的查詢一個表而得到結(jié)果。實
23、際上連接學(xué)生和課程的是“選課”表,因此這個查詢涉及到三個表:學(xué)生、課程、選課。查詢步驟如下: 在課程表中查詢“數(shù)學(xué)”課的課程號。 在選課表中找到選修了上一步得到的課程號的課程的學(xué)生學(xué)號。 在學(xué)生表中找到學(xué)號包含在上一步所得到的學(xué)號集合中的學(xué)生姓名。 SELECT 學(xué)號,姓名 FROM 學(xué)生 WHERE 學(xué)號 IN (SELECT 學(xué)號 FROM 選課 WHERE 課程號 IN (SELECT 課程號 FROM 課程 WHERE 課程=數(shù)學(xué)) (2) 帶有比較運(yùn)算符的子查詢 帶有比較運(yùn)算符的子查詢是指父查詢與子查詢之間用比較運(yùn)算符進(jìn)行連接。當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時,可以用、2或等比
24、較運(yùn)算符。例2-33 查詢與“劉剛”同一個系的學(xué)生。這個查詢分兩步: 首先在學(xué)生表找到“劉剛”所在的系。 然后在學(xué)生表中查詢所在系與上一不的查詢結(jié)果相等的學(xué)生名單。SELECT 姓名FROM 學(xué)生WHERE 所在系=(SELECT所在系 FROM 學(xué)生 WHERE 姓名=劉剛) 2.2.4 SQL數(shù)據(jù)操縱數(shù)據(jù)操縱 在對數(shù)據(jù)庫進(jìn)行操作時,除了經(jīng)常查詢數(shù)據(jù)庫外,還要更新數(shù)據(jù)。SQL中數(shù)據(jù)更新包括插入數(shù)據(jù)(INSERT)、修改數(shù)據(jù)(UPDATE)和刪除數(shù)據(jù)(DELETE)三條語句。1. 插入語句(INSERT INTO )例2-34 將一個新學(xué)生記錄(學(xué)號:95005;姓名:陳??;性別:男;所在系:
25、計算機(jī);年齡:18歲)插入學(xué)生表中。 INSERT INTO 學(xué)生 VALUES(95020,陳俊,男,18,計算機(jī)系); 2. 刪除語句 (DELETE )例2-35 刪除學(xué)號為95001的學(xué)生記錄。 DELETE FROM 學(xué)生 WHERE 學(xué)號=95001;3. 修改語句(UPDATE )例2-36 將學(xué)號為95001的學(xué)生年齡改為22歲。 UPDATE 學(xué)生 SET 年齡=22 WHERE 學(xué)號=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修改學(xué)生學(xué)號的權(quán)限收回。 REVOKE UPDATE(學(xué)號) ON 學(xué)生 FROM wp 2.3 關(guān)系數(shù)據(jù)理論關(guān)系數(shù)據(jù)理論 針對一個具體的問題,應(yīng)該如何構(gòu)造一個適合于它的數(shù)據(jù)模式。這是數(shù)據(jù)庫設(shè)計問題
27、,確切地講是數(shù)據(jù)庫邏輯設(shè)計問題。 關(guān)系模型有嚴(yán)格的數(shù)學(xué)理論基礎(chǔ),基于這種理論上的優(yōu)勢,關(guān)系模型可以設(shè)計的更加科學(xué),關(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è)計一個教學(xué)管理數(shù)據(jù)庫,希望在該數(shù)據(jù)庫中保存學(xué)生的學(xué)號、姓名、性別、年齡、系名、系主任和該學(xué)生選修的課程及成績信息。若據(jù)此設(shè)計一個關(guān)系保存所有的數(shù)據(jù),關(guān)系模式為:
28、 教學(xué)(學(xué)號,姓名,性別,年齡,系名,系主任,課程名,成績) 這個關(guān)系模式存在以下的問題: 數(shù)據(jù)冗余大 插入異常 刪除異常。 更新異常 由于上述的問題,它是一個不合理的設(shè)計。一個合理的設(shè)計應(yīng)該盡量減少以上的問題。只有找到問題存在的原因,才能找到解決辦法。那么出現(xiàn)上述問題的原因是什么呢?這是因為這個關(guān)系模式中的數(shù)據(jù)之間的依賴關(guān)系所造成的。如果把這個單一的關(guān)系模式,分解成如下三個關(guān)系模式: 學(xué)生(學(xué)號,姓名,性別,年齡,所在系); 系(系名,系主任); 選課(學(xué)號,課程名,成績) 2.3.2 函數(shù)依賴及規(guī)范化函數(shù)依賴及規(guī)范化 為了使數(shù)據(jù)庫模式的設(shè)計更合理,人們研究了規(guī)范化理論。而函數(shù)依賴?yán)碚撌顷P(guān)系
29、規(guī)范化的理論基礎(chǔ)。函數(shù)依賴反映了同一關(guān)系中屬性間一一對應(yīng)的約束。 1. 關(guān)系模式的簡化表示法 一般把關(guān)系模式看做一個三元組: R(U,F(xiàn)) 其中,R是關(guān)系名,U是一組屬性,F(xiàn)是屬性組U上的一組數(shù)據(jù)依賴關(guān)系的集合。當(dāng)且僅當(dāng)U上的一個關(guān)系 r 滿足 F 時,r稱為關(guān)系模式R(U,F(xiàn))的一個關(guān)系。 2. 函數(shù)依賴 函數(shù)依賴是數(shù)據(jù)依賴的一種,函數(shù)依賴反映了同一關(guān)系中屬性間的一一對應(yīng)約束。它是現(xiàn)實世界屬性間相互聯(lián)系的抽象,是數(shù)據(jù)內(nèi)在的性質(zhì),是語義的體現(xiàn)。它是數(shù)據(jù)庫規(guī)范化理論的基礎(chǔ)。 函數(shù)依賴普遍存在于現(xiàn)實生活中。例如在描述學(xué)生的關(guān)系中,可能的屬性有學(xué)號,姓名,所在系等。由于一個學(xué)號只對應(yīng)于一個學(xué)生,一個
30、學(xué)生只能屬于一個系,因此學(xué)號確定之后,該學(xué)生的姓名和所在系也唯一的確定了。類似于自變量確定了,函數(shù)值也唯一確定了。起決定性的屬性相當(dāng)于自變量。函數(shù)依賴記為:學(xué)號姓名,學(xué)號所在系。 現(xiàn)在討論一個具體的關(guān)系模式。例如,要設(shè)計一個教學(xué)管理數(shù)據(jù)庫,希望該數(shù)據(jù)庫中包括的信息有學(xué)生學(xué)號、姓名、系名、系主任姓名,以及學(xué)生學(xué)習(xí)的課程和成績。于是得到一組屬性: U=學(xué)號,姓名,系名,系主任,課程名,成績 根據(jù)經(jīng)驗得知: 一個學(xué)號對應(yīng)一個學(xué)生,即一個學(xué)號對應(yīng)一個姓名,但可以有多個學(xué)生重名; 一個系有若干學(xué)生,但一個學(xué)生只屬于一個系; 一個系只有一名(正職)負(fù)責(zé)人; 一個學(xué)生可選修多門課程,每門課程有若干學(xué)生選修;
31、 學(xué)生學(xué)習(xí)每一門課程有一個成績; 于是得到屬性組上的一組函數(shù)依賴: F=學(xué)號姓名,學(xué)號系名,系名系主任,(學(xué)號,課程名)成績 定義:設(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ù)依賴。例如,在教學(xué)關(guān)系模式中,學(xué)號系名,系名系主任,所以系主任對學(xué)號傳遞依賴。 3. 范式 關(guān)系數(shù)據(jù)庫中的關(guān)系是要滿足一定要求的。滿足不同程度要求的為不同的
32、范式。范式是滿足一定函數(shù)依賴的關(guān)系模式的集合。有多種范式:第一范式、第二范式、第三范式、BCN范式等。滿足最低要求的叫第一范式,簡稱1NF。在滿足第一范式的條件下,滿足進(jìn)一步條件的為第二范式,簡稱2NF。其余依此類推。顯然各種范式之間存在關(guān)系: 1NF2NF 3NF BCNF 4NF 5NF 一個低一級的范式模式,通過模式分解可以轉(zhuǎn)換為若干個高一級范式的模式集合,這個過程叫規(guī)范化。 (1) 第一范式(1NF) 定義:如果一個關(guān)系模式R的所有屬性都是簡單屬性,即每個屬性都是不可再分的基本數(shù)據(jù)項,則稱R屬于第一范式,記作 R 1NF。 例如,教學(xué)模式中的所有屬性都是不可再分的簡單屬性,即: 教學(xué)(
33、學(xué)號,姓名,系名,系主任,課程名,成績) 1NF (2 ) 第二范式(2NF) 定義:若一個關(guān)系模式RlNF,且每一個非主屬性完全函數(shù)依賴于關(guān)鍵字,則R2NF。 將教學(xué)模式分為以下兩個模式: 學(xué)生_系(學(xué)號,姓名,系,系主任); 選課(學(xué)號,課程名,成績) 在“學(xué)生_系”關(guān)系中,“學(xué)號”是關(guān)鍵字,其它非主屬性都完全依賴于關(guān)鍵字,“選課”關(guān)系中,(學(xué)號,課程名)是關(guān)鍵字,非主屬性也完全依賴于關(guān)鍵字,因此兩個關(guān)系中非主屬都完全函數(shù)依賴于關(guān)鍵字,服從2NF,即: 學(xué)生_系2NF,選課2NF。 (3 ) 第三范式(3NF) 定義:若關(guān)系模式R是第二范式,且沒有一個非主屬性傳遞函數(shù)依賴關(guān)鍵字,則R3NF。R3NF,則非主屬性對主屬性既不部分函數(shù)依賴于關(guān)鍵字,也不傳遞函數(shù)依賴于關(guān)鍵字。 考察“學(xué)生_系”關(guān)系,可以看出:學(xué)號系名,系名系主任,即“系主任”傳遞依賴于“學(xué)號”?!皩W(xué)號”是關(guān)鍵字,而“系主任”是非主屬性,它們
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五版科技創(chuàng)新9%股權(quán)投資與收益分享協(xié)議3篇
- 二零二五版酒精生產(chǎn)設(shè)備升級改造與原料采購合同3篇
- 二零二五年度個人裝修私人借款合同
- 2025年度歷史文化遺跡修復(fù)裝修終止合同協(xié)議
- 2025年度簡易公司入股合伙人協(xié)議書及股權(quán)激勵計劃
- 2025年度影視特效版權(quán)授權(quán)合同
- 2025年度監(jiān)護(hù)權(quán)監(jiān)護(hù)義務(wù)明確協(xié)議
- 2025年度新能源車輛租賃業(yè)務(wù)連帶擔(dān)保協(xié)議
- 西安市2025年度二手車購買合同標(biāo)準(zhǔn)格式3篇
- 2025年度沈陽公司總經(jīng)理聘用合同執(zhí)行范本
- 割接方案的要點(diǎn)、難點(diǎn)及采取的相應(yīng)措施
- 2025年副護(hù)士長競聘演講稿(3篇)
- 2024年08月北京中信銀行北京分行社會招考(826)筆試歷年參考題庫附帶答案詳解
- 原發(fā)性腎病綜合征護(hù)理
- 2024年高考英語復(fù)習(xí)(新高考專用)完形填空之詞匯復(fù)現(xiàn)
- 【京東物流配送模式探析及發(fā)展對策探究開題報告文獻(xiàn)綜述4100字】
- 施工現(xiàn)場工程令
- 藥物經(jīng)濟(jì)學(xué)評價模型構(gòu)建
- Daniel-Defoe-Robinson-Crusoe-笛福和魯濱遜漂流記全英文PPT
- 第一章威爾遜公共行政管理理論
- 外科護(hù)理(高職護(hù)理專業(yè))PPT完整全套教學(xué)課件
評論
0/150
提交評論