




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
Web資料庫應(yīng)用
2.1關(guān)係資料庫
關(guān)係資料庫系統(tǒng)是支持關(guān)係模型的資料庫系統(tǒng)。關(guān)係模型由關(guān)係數(shù)據(jù)結(jié)構(gòu)、關(guān)係操作集合和關(guān)係完整性約束三部分組成。
關(guān)係資料庫是表的集合,資料庫中的表,數(shù)學(xué)家稱為關(guān)係。關(guān)係資料庫中還定義了關(guān)係操作和完整性約束,關(guān)係操作就是對(duì)表中的數(shù)據(jù)的處理、查詢,完整性約束就是表中的數(shù)據(jù)要滿足的條件,這些條件由資料庫系統(tǒng)自動(dòng)維護(hù),產(chǎn)生違反這些約束條件的對(duì)數(shù)據(jù)的操作會(huì)被拒絕執(zhí)行。
2.1.1關(guān)係數(shù)據(jù)結(jié)構(gòu)
在關(guān)係模型中,無論是實(shí)體還是實(shí)體之間的聯(lián)繫均由單一的結(jié)構(gòu)即關(guān)係(表)來表示。關(guān)係模型是建立在集合代數(shù)的基礎(chǔ)上的。
1關(guān)係的定義在用戶觀點(diǎn)下,關(guān)係模型中數(shù)據(jù)的邏輯結(jié)構(gòu)是一張二維表。二維表的每一列稱為屬性。每個(gè)屬性有一個(gè)取值範(fàn)圍,稱為值域。每個(gè)屬性對(duì)應(yīng)一個(gè)值域。下麵是二維表的一個(gè)實(shí)例。
學(xué)號(hào)姓名性別1張三男2李四男2關(guān)係中的基本名詞(1)關(guān)鍵字能唯一標(biāo)識(shí)一行記錄或元組的一個(gè)或一組屬性。(2)候選關(guān)鍵字(Candidatekey)和主關(guān)鍵字(Primarykey)能作為關(guān)鍵字的屬性可能有很多,這些屬性稱為候選關(guān)鍵字。為數(shù)據(jù)管理方便,若一個(gè)關(guān)係有多個(gè)候選關(guān)鍵字時(shí),指定其中一個(gè)為主關(guān)鍵字。(3)主屬性(PrimaryAttribute)和非主屬性(Non-keyAttribute)候選關(guān)鍵字中的屬性為主屬性。不包含在任何候選關(guān)鍵字中的屬性為非主屬性。3資料庫中關(guān)係的類型關(guān)係可以有三種類型:基本關(guān)係(通常稱為基本表或基表)查詢表和視圖表。
(1)基本表基本表是關(guān)係資料庫中實(shí)際存在的表,它是實(shí)際存儲(chǔ)數(shù)據(jù)的邏輯表。
(2)查詢表它是從基本表中查詢得到的,一般是臨時(shí)表。
(3)視圖表視圖表是由基本表或其他視圖表導(dǎo)出的表,它是為數(shù)據(jù)處理方便以及數(shù)據(jù)安全要求而設(shè)計(jì)的虛表,它一般是不存儲(chǔ)數(shù)據(jù)的,而只是存儲(chǔ)提取數(shù)據(jù)的條件,它的數(shù)據(jù)依賴於基本表。
4基本關(guān)係的性質(zhì)基本關(guān)係具有如下六條性質(zhì):(1)列是同性質(zhì)的,即同一列中的分量是同一類型的數(shù)據(jù)。(2)關(guān)係中的列又稱為屬性,並賦予屬性名。不同列的屬性名不同。不同列可以取相同的數(shù)據(jù)類型。(3)列的次序可以任意交換。(4)任意兩個(gè)元組不能完全相同。(5)行的次序可以任意交換。(6)列具有原子性,即每一列值是不可分的資料項(xiàng)目5關(guān)係模式關(guān)係模式是對(duì)關(guān)係的描述,可以理解為表的結(jié)構(gòu)定義。關(guān)係實(shí)際上就是關(guān)係模式在某一時(shí)刻的狀態(tài)或內(nèi)容。也就是說,關(guān)係模式是型,關(guān)係是它的值。
6關(guān)係資料庫在關(guān)係模型中,實(shí)體以及實(shí)體間的聯(lián)繫都是用關(guān)係來表示。在一個(gè)給定應(yīng)用中,所有實(shí)體及實(shí)體之間聯(lián)繫的集合構(gòu)成一個(gè)關(guān)係資料庫。關(guān)係資料庫也有型和值之分。
2.1.2關(guān)係操作
關(guān)係模型給出了關(guān)係操作的能力,但不對(duì)具體的RDBMS給出具體的語法要求。關(guān)係操作語言靈活方便,表達(dá)能力和功能強(qiáng)大。關(guān)係模型的數(shù)據(jù)操作採用集合操作方式,即操作對(duì)象和結(jié)果都是集合。關(guān)係模型中常用的關(guān)係操作包括數(shù)據(jù)查詢、數(shù)據(jù)維護(hù)和數(shù)據(jù)控制三大功能。數(shù)據(jù)查詢指數(shù)據(jù)檢索、統(tǒng)計(jì)、排序等功能;數(shù)據(jù)維護(hù)指數(shù)據(jù)的增加、刪除、修改等數(shù)據(jù)的更新功能;數(shù)據(jù)控制是為了保證數(shù)據(jù)的安全性和完整性而採用的數(shù)據(jù)存儲(chǔ)控制及併發(fā)控制等功能。
2.1.3關(guān)係的完整性
1實(shí)體完整性現(xiàn)實(shí)世界中的實(shí)體是可區(qū)分的,即它們具有某種唯一性標(biāo)識(shí)。相應(yīng)地,關(guān)係模型中以主鍵(主關(guān)鍵字)作為唯一性標(biāo)識(shí)。主鍵中的屬性即主屬性不能取空值。所謂空值就是“不知道”或“無意義”的值。2參照完整性現(xiàn)實(shí)世界中的實(shí)體之間往往存在某種聯(lián)繫,在關(guān)係模型中實(shí)體及實(shí)體間的聯(lián)繫都是用關(guān)係來描述的。這樣就自然存在著關(guān)係與關(guān)係間的引用。
3.用戶定義的完整性
用戶定義的完整性是針對(duì)某一具體關(guān)係資料庫的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。例如:某個(gè)屬性的取值不能為空,學(xué)生考試的成績(jī)?nèi)≈倒?fàn)圍在0到100之間。
2.2SQL語言
SQL全稱是“StructuredQueryLanguage”,即結(jié)構(gòu)化查詢語言,它目前是關(guān)係資料庫的標(biāo)準(zhǔn)語言,它是在1974年由Boyce和Chamberlin提出的。經(jīng)過不斷修改、擴(kuò)充和完善,SQL語言最終發(fā)展成為關(guān)係資料庫的標(biāo)準(zhǔn)語言。由於它功能豐富、語言簡(jiǎn)潔、易學(xué)易用,所以深受用戶和電腦工業(yè)界的歡迎,被各電腦公司和軟體公司廣泛採用。
SQL標(biāo)準(zhǔn)的影響超出了資料庫領(lǐng)域,SQL成為國際標(biāo)準(zhǔn)後,它在資料庫以外的其他領(lǐng)域也得到了重視和採用。在未來一段相當(dāng)長(zhǎng)的時(shí)間,SQL將是資料庫語言領(lǐng)域中的一個(gè)主流語言。
2.2.1SQL概述及特點(diǎn)
1.SQL概述
SQL是一種結(jié)構(gòu)化查詢語言,其功能並不象名稱所顯示的那樣僅僅是查詢,而是一個(gè)通用的、功能強(qiáng)大的關(guān)係資料庫語言。SQL從主要功能上可以分為4個(gè)部分:數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制。它是一個(gè)綜合的、通用的關(guān)係資料庫查詢語言。它的特點(diǎn)如下:
(1)功能一體化
(2)高度非過程化
(3)以同一種語法結(jié)構(gòu)提供兩種使用方式
(4)語言簡(jiǎn)潔,易學(xué)易用
2.SQL語言的基本概念
SQL支持三級(jí)模式結(jié)構(gòu),外模式對(duì)應(yīng)於視圖和部分基本表,模式對(duì)應(yīng)於基本表,內(nèi)模式對(duì)應(yīng)於存儲(chǔ)檔?;颈硎仟?dú)立存在的表,一個(gè)關(guān)係就是一個(gè)表?;颈硎前磾?shù)據(jù)全局邏輯模式建立的。全體基本表構(gòu)成了資料庫的模式。一個(gè)SQL模式(Schema)是表和約束的集合。視圖是從基本表或其他視圖中導(dǎo)出的表,它本身不獨(dú)立存儲(chǔ)在資料庫中,也就是說資料庫中只存放視圖的定義而不存放視圖的數(shù)據(jù),這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中。因此,視圖是一個(gè)虛表。2.2.2SQL數(shù)據(jù)定義
SQL的數(shù)據(jù)定義功能包括定義表、定義視圖、定義索引和定義資料庫。SQL的數(shù)據(jù)定義語句見下表。操作對(duì)象創(chuàng)建語句刪除語句修改語句基本表CREATETABLEDROPTABLEALTERTABLE索引CREATEINDEXDROPINDEXALTERINDEX視圖CREATEVIEWDROPVIEWALTERVIEW資料庫CREATEDATABASEDROPDATABASEALTERDATABASE
1.基本表的定義和維護(hù)
SQL基本表的定義和維護(hù)功能包括表的定義、修改和刪除。(1)定義基本表(CREATETABLE)
[例2-2]建立一個(gè)“學(xué)生”表,它由學(xué)號(hào)、姓名、性別、年齡、所在系五個(gè)屬性組成,年齡是整型數(shù)據(jù),其他為字元型。
CREATETABLE學(xué)生(學(xué)號(hào)CHAR(5),
姓名CHAR(20),
年齡INT,
性別CHAR(2),
所在系CHAR(20),
)
(2)修改基本表(ALTERTABLE)
[例2-6]刪除“學(xué)生”表中“入學(xué)時(shí)間”列。
ALTERTABLE學(xué)生
DROPCOLUMN入學(xué)時(shí)間;
(3)
刪除基本表
[例2-7]刪除學(xué)生表
DROPTABLE
學(xué)生
2.索引的定義和維護(hù)當(dāng)你閱讀一本厚書時(shí),如果你想快速找到特定的內(nèi)容,你就需要查看目錄,找到你所關(guān)心的內(nèi)容在書中的準(zhǔn)確位置——頁碼,然後直接翻到這個(gè)位置。索引對(duì)於表,就相當(dāng)於書的目錄。索引可以提高數(shù)據(jù)查詢速度??梢詫?duì)頻繁查詢的表增加索引。只有按有索引的列查詢,索引才有作用。
(1)建立索引
(CREATEINDEX)
[例2-8]為學(xué)生表建立索引,按學(xué)號(hào)昇冪建唯一索引。
CREATEUNIQUEINDEXStusnoON學(xué)生
(學(xué)號(hào))(2)刪除索引(DROPINDEX)
[例2-9]DROPINDEX學(xué)生.Stusno
2.2.3SQL數(shù)據(jù)查詢
資料庫查詢是資料庫的核心操作,查詢就是從資料庫中挑選、提取所需要的數(shù)據(jù)。SQL提供了SELECT語句進(jìn)行資料庫的查詢,該語句使用方式靈活、功能強(qiáng)大。
SELECT語句的語法格式為:SELECT[ALL|DISTINCT]<目標(biāo)列表達(dá)式>[,<目標(biāo)列表達(dá)式>]...FROM<表名或視圖名>[,<表名或視圖名>]...[WHERE<行選擇條件>][GROUPBY<列名1>[HAVING<組選擇條件>]][ORDERBY<列名2>[ASC|DESC]];
1.簡(jiǎn)單查詢簡(jiǎn)單查詢是指從一個(gè)表中進(jìn)行查詢,也叫單表查詢。如選擇一個(gè)表中的某些列、某些行。(1)查詢指定列[例2-10]查詢?nèi)w學(xué)生的姓名與學(xué)號(hào)。學(xué)生表中有很多列:學(xué)號(hào),姓名,年齡,性別,所在系,而下列語句只選擇學(xué)號(hào)和姓名兩列,即查詢的結(jié)果是一個(gè)只包含兩列的新關(guān)係。
SELECT學(xué)號(hào),姓名
FROM學(xué)生;(2)查詢?nèi)苛衃例2-11]查詢學(xué)生表的全部列:
SELECT*FROM學(xué)生也可以寫為:
SELECT學(xué)號(hào),姓名,年齡,性別,所在系(3)查詢經(jīng)過計(jì)算的值
SELECT子句可以包含運(yùn)算式,運(yùn)算對(duì)象可以是常量或?qū)傩?。[例2-12]查詢5年之後學(xué)生的年齡。假如資料庫中學(xué)生的年齡是今年的年齡。
SELECT學(xué)號(hào),姓名,年齡+5FROM學(xué)生(4)消除取值重複的行一個(gè)表中兩個(gè)本來不完全相同的行,選擇部分列後,可能完全相同了。[例2-13]查詢選修了課程的學(xué)號(hào)。
SELECT學(xué)號(hào)
FROM選課如果要去掉重複行,必須指定短語DISTINCT:
SELECTDISTINCT學(xué)號(hào)
FROM選課取消了重複行,結(jié)果就是選了課的學(xué)生學(xué)號(hào)。(5)查詢滿足條件的行
WHERE子句通過條件運(yùn)算式描述表中行的選擇條件。DBMS系統(tǒng)根據(jù)選擇條件掃描表中的每一行,把不符合條件的行篩選掉。WHERE子句常用的查詢條件,如下表所示:查詢條件常用謂詞比較=,>,<,>=,<=,<>,!>,!<;NOT+上述比較運(yùn)算符確定範(fàn)圍BETWEENAND,NOTBETWEENAND確定集合IN,NOTIN字元匹配LIKE,NOTLIKE空值ISNULL,ISNOTNULL多重條件AND,OR①比較[例2-14]查詢資訊系學(xué)生的名單
SELECT姓名
FROM學(xué)生
WHERE所在系='資訊系'[例2-15]查詢所有20歲以下的學(xué)生姓名和年齡
SELECT姓名,年齡
FROM學(xué)生
WHERE年齡<20[例2-16]查詢有成績(jī)不及格的學(xué)生的學(xué)號(hào)
SELECTDISTINCT學(xué)號(hào)
FROM選課
WHERE成績(jī)<60②
確定範(fàn)圍[例2-17]查詢年齡在20到23歲(包括20和23)之間的學(xué)生姓名、年齡、所在系。
SELECT姓名,年齡,所在系
FROM學(xué)生
WHERE年齡BETWEEN20AND23③
確定集合[例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é)生名單及課程號(hào)。
SELECT學(xué)號(hào),課程號(hào)
FROM選課
WHERE成績(jī)ISNULL⑥
多重條件查詢?nèi)绻樵儣l件多於兩個(gè),則要使用邏輯運(yùn)算符AND和OR連接多個(gè)條件,AND的優(yōu)先順序高於OR,但可使用括弧改變運(yùn)算順序。[例2-23]查詢電腦系姓趙的學(xué)生。
SELECT姓名
FROM學(xué)生
WHERE所在系='電腦系'AND姓名
LIKE'趙%'(6)對(duì)查詢結(jié)果排序如果沒有指定查詢結(jié)果的顯示順序,DBMS通常按其數(shù)據(jù)錄入的先後順序(物理存儲(chǔ)順序)輸出查詢結(jié)果。用戶也可以用ORDERBY子句指定按照一個(gè)或多個(gè)屬性列的昇冪(ASC)或降序(DESC)重新排列查詢結(jié)果,其中昇冪ASC為缺省值。[例2-24]查詢選修了3號(hào)課程的學(xué)生的學(xué)號(hào)及其成績(jī),查詢結(jié)果按成績(jī)的降序排列。
SELECT學(xué)號(hào),成績(jī)
FROM選課
WHERE課程號(hào)='3'ORDERBY成績(jī)DESC(7)使用集合函數(shù)為了進(jìn)一步方便用戶,增強(qiáng)檢索功能,SQL提供了許多集函數(shù),常用的集函數(shù)見下表。函數(shù)名意義COUNT([DISTINCT|ALL]*)統(tǒng)計(jì)記錄個(gè)數(shù)COUNT([DISTINCT|ALL]列名)統(tǒng)計(jì)一列中值的個(gè)數(shù)SUM([DISTINCT|ALL]列名)計(jì)算一列值的總和(此列必須是數(shù)值型)AVG([DISTINCT|ALL]列名)計(jì)算一列值的平均值(此列必須是數(shù)值型)MAX([DISTINCT|ALL]列名)求一列值中的最大值MIN([DISTINCT|ALL]列名)求一列值中的最大值[例2-25]查詢學(xué)生總?cè)藬?shù)。
SELECTCOUNT(*)
FROM學(xué)生[例2-26]查詢選修了課程的學(xué)生人數(shù)。
SELECTCOUNT(DISTINCT學(xué)號(hào))
FROM選課學(xué)生每選修一門課,在選課中都有一條相應(yīng)的記錄,而一個(gè)學(xué)生一般都要選修多門課,為避免重複計(jì)算學(xué)生人數(shù),必須在COUNT函數(shù)中用DISTINCT限定詞。(8)對(duì)查詢結(jié)果分組
GROUPBY子句可以將查詢結(jié)果表的各行按一列或多列的值分組,值相等的為一組。對(duì)查詢結(jié)果分組的目的是為了細(xì)化集函數(shù)的作用對(duì)象。如果未對(duì)查詢結(jié)果分組,集函數(shù)將作用於整個(gè)查詢結(jié)果,即整個(gè)查詢結(jié)果只有一個(gè)函數(shù)值,如上面的例題,否則,集函數(shù)將作用於每一個(gè)組,即每一組都有一個(gè)函數(shù)值。[例2-28]查詢各個(gè)課程號(hào)與相應(yīng)的選課人數(shù)。
SELECT課程號(hào),COUNT(學(xué)號(hào))
FROM選課
GROUPBY課程號(hào)該SELECT語句對(duì)課程表按課程號(hào)的取值進(jìn)行分組,所有具有相同課程號(hào)的行為一組,然後對(duì)每一組作用集函數(shù)COUNT以求得該組的學(xué)生人數(shù)。2.連接查詢一個(gè)資料庫中的多個(gè)表之間一般都存在某種內(nèi)在聯(lián)繫,它們共同提供有用的資訊。前面的查詢都是針對(duì)一個(gè)表進(jìn)行的。若一個(gè)查詢同時(shí)涉及兩個(gè)以上的表,則稱之為連接查詢。連接查詢實(shí)際上是關(guān)係資料庫中最主要的查詢,主要包括等值連接查詢、非等值連接查詢、自身連接查詢、外連接查詢和複合條件連接查詢。
[例2-31]查詢每個(gè)學(xué)生及其選修課程的情況。學(xué)生選課情況存放在選課表中,所以本查詢實(shí)際上同時(shí)涉及學(xué)生表和選課表兩個(gè)表中的數(shù)據(jù)。這兩個(gè)表之間的聯(lián)繫是通過兩個(gè)表都具有的公共屬性學(xué)號(hào)實(shí)現(xiàn)的。要查詢學(xué)生及其選修課程的情況.就必須將這兩個(gè)表中學(xué)號(hào)相同的元組連接起來。這是一個(gè)等值連接。完成本查詢的SQL語句為:
SELECT學(xué)生.*,選課.*FROM學(xué)生,選課
WHERE學(xué)生.學(xué)號(hào)=選課.學(xué)號(hào)3.嵌套查詢?cè)赟QL語言中,一個(gè)SELECT—FROM—WHERE語句稱為一個(gè)查詢塊。將一個(gè)查詢塊嵌套在另一個(gè)查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢或子查詢。在嵌套查詢中,上層的查詢塊又稱為外層查詢或父查詢或主查詢,下層查詢塊又稱為內(nèi)層查詢或子查詢。SQL語言允許多層嵌套查詢。即一個(gè)子查詢中還可以嵌套其他子查詢。
嵌套查詢使得可以用一系列簡(jiǎn)單查詢構(gòu)成複雜的查詢,從而明顯地增強(qiáng)了SQL的查詢能力。(1)帶有IN謂詞的子查詢帶有IN渭詞的子查詢是指父查詢與子查詢之間用IN進(jìn)行連接,判斷某個(gè)屬性列值是否在子查詢的結(jié)果中。由於在嵌套查詢中,子查詢的結(jié)果往往是一個(gè)集合,所以謂詞IN是嵌套查詢中最經(jīng)常使用的謂詞。[例2-32]查詢選修了“數(shù)學(xué)”課的學(xué)生姓名。學(xué)生名和課程名分別在“學(xué)生”和“課程”表中,因此不能通過簡(jiǎn)單的查詢一個(gè)表而得到結(jié)果。實(shí)際上連接學(xué)生和課程的是“選課”表,因此這個(gè)查詢涉及到三個(gè)表:學(xué)生、課程、選課。查詢步驟如下:
在課程表中查詢“數(shù)學(xué)”課的課程號(hào)。
在選課表中找到選修了上一步得到的課程號(hào)的課程的學(xué)生學(xué)號(hào)。
在學(xué)生表中找到學(xué)號(hào)包含在上一步所得到的學(xué)號(hào)集合中的學(xué)生姓名。
SELECT學(xué)號(hào),姓名
FROM學(xué)生
WHERE學(xué)號(hào)IN(SELECT學(xué)號(hào)
FROM 選課
WHERE課程號(hào)IN(SELECT課程號(hào)
FROM課程
WHERE課程='數(shù)學(xué)'))
(2)帶有比較運(yùn)算符的子查詢帶有比較運(yùn)算符的子查詢是指父查詢與子查詢之間用比較運(yùn)算符進(jìn)行連接。當(dāng)用戶能確切知道內(nèi)層查詢返回的是單值時(shí),可以用>、<、=、>=、<=、2=或<>等比較運(yùn)算符。[例2-33]查詢與“劉剛”同一個(gè)系的學(xué)生。這個(gè)查詢分兩步:
首先在學(xué)生表找到“劉剛”所在的系。
然後在學(xué)生表中查詢所在系與上一不的查詢結(jié)果相等的學(xué)生名單。SELECT姓名FROM學(xué)生WHERE所在系=(SELECT所在系
FROM學(xué)生
WHERE姓名='劉剛')
2.2.4SQL數(shù)據(jù)操縱
在對(duì)數(shù)據(jù)庫進(jìn)行操作時(shí),除了經(jīng)常查詢資料庫外,還要更新數(shù)據(jù)。SQL中數(shù)據(jù)更新包括插入數(shù)據(jù)(INSERT)、修改數(shù)據(jù)(UPDATE)和刪除數(shù)據(jù)(DELETE)三條語句。插入語句(INSERTINTO
)[例2-34]將一個(gè)新學(xué)生記錄(學(xué)號(hào):95005;姓名:陳?。恍詣e:男;所在系:電腦;年齡:18歲)插入學(xué)生表中。
INSERTINTO學(xué)生
VALUES("95020","陳俊","男",18,"電腦系");
2.刪除語句(DELETE)[例2-35]刪除學(xué)號(hào)為95001的學(xué)生記錄。
DELETEFROM學(xué)生
WHERE學(xué)號(hào)='95001';3.修改語句(UPDATE
)[例2-36]將學(xué)號(hào)為95001的學(xué)生年齡改為22歲。
UPDATE學(xué)生
SET年齡=22WHERE學(xué)號(hào)='95001'2.2.5SQL數(shù)據(jù)控制
這裏所討論的數(shù)據(jù)控制主要是指SQL語言的安全性控制功能,通過對(duì)數(shù)據(jù)庫用戶的使用權(quán)限加以限制而保證數(shù)據(jù)安全的重要措施。SQL語言的的數(shù)據(jù)控制語句包括授權(quán)(Grant)、收權(quán)或刪除許可權(quán)(Revoke)、拒絕訪問(Deny)三種,許可權(quán)的設(shè)置對(duì)象可以是資料庫用戶或用戶組。授權(quán)
[例2-37]將查詢成績(jī)的許可權(quán)授予所有人。
GRANTSELECTONTABLE成績(jī)TOPUBLIC2.收權(quán)語句資料庫管理員DBA、資料庫擁有者DBO或資料庫對(duì)象的擁有者DBOO可以通過REVOKE語句將其他用戶的數(shù)據(jù)操作許可權(quán)收回。
[例2-38]將用戶wp修改學(xué)生學(xué)號(hào)的許可權(quán)收回。
REVOKEUPDATE(學(xué)號(hào))
ON學(xué)生
FROMwp
2.3關(guān)係數(shù)據(jù)理論
針對(duì)一個(gè)具體的問題,應(yīng)該如何構(gòu)造一個(gè)適合於它的數(shù)據(jù)模式。這是資料庫設(shè)計(jì)問題,確切地講是資料庫邏輯設(shè)計(jì)問題。關(guān)係模型有嚴(yán)格的數(shù)學(xué)理論基礎(chǔ),基於這種理論上的優(yōu)勢(shì),關(guān)係模型可以設(shè)計(jì)的更加科學(xué),關(guān)係資料庫中的問題可以更好地解決。關(guān)係資料庫規(guī)範(fàn)化理論就是資料庫邏輯設(shè)計(jì)工具。關(guān)係資料庫的規(guī)範(fàn)化理論就是解決如何設(shè)計(jì)出合理的關(guān)係資料庫模式,也就是一個(gè)資料庫中要定義哪些表,每個(gè)表有哪些屬性,表之間有哪些聯(lián)繫,而儘量地減少數(shù)據(jù)冗餘,消除插入、刪除等存在的問題。2.3.1關(guān)係模式可能存在的問題
例如,要設(shè)計(jì)一個(gè)教學(xué)管理資料庫,希望在該資料庫中保存學(xué)生的學(xué)號(hào)、姓名、性別、年齡、系名、系主任和該學(xué)生選修的課程及成績(jī)資訊。若據(jù)此設(shè)計(jì)一個(gè)關(guān)係保存所有的數(shù)據(jù),關(guān)係模式為:教學(xué)(學(xué)號(hào),姓名,性別,年齡,系名,系主任,課程名,成績(jī))這個(gè)關(guān)係模式存在以下的問題:
數(shù)據(jù)冗餘大
插入異常
刪除異常。
更新異常
由於上述的問題,它是一個(gè)不合理的設(shè)計(jì)。一個(gè)合理的設(shè)計(jì)應(yīng)該儘量減少以上的問題。只有找到問題存在的原因,才能找到解決辦法。那麼出現(xiàn)上述問題的原因是什麼呢?這是因?yàn)檫@個(gè)關(guān)係模式中的數(shù)據(jù)之間的依賴關(guān)係所造成的。如果把這個(gè)單一的關(guān)係模式,分解成如下三個(gè)關(guān)係模式:學(xué)生(學(xué)號(hào),姓名,性別,年齡,所在系);系(系名,系主任);選課(學(xué)號(hào),課程名,成績(jī))
2.3.2函數(shù)依賴及規(guī)範(fàn)化
為了使資料庫模式的設(shè)計(jì)更合理,人們研究了規(guī)範(fàn)化理論。而函數(shù)依賴?yán)碚撌顷P(guān)係規(guī)範(fàn)化的理論基礎(chǔ)。函數(shù)依賴反映了同一關(guān)係中屬性間一一對(duì)應(yīng)的約束。
1.關(guān)係模式的簡(jiǎn)化表示法一般把關(guān)系模式看做一個(gè)三元組:
R(U,F(xiàn))其中,R是關(guān)係名,U是一組屬性,F(xiàn)是屬性組U上的一組數(shù)據(jù)依賴關(guān)係的集合。當(dāng)且僅當(dāng)U上的一個(gè)關(guān)係r滿足F時(shí),r稱為關(guān)係模式R(U,F(xiàn))的一個(gè)關(guān)係。
2.函數(shù)依賴
函數(shù)依賴是數(shù)據(jù)依賴的一種,函數(shù)依賴反映了同一關(guān)係中屬性間的一一對(duì)應(yīng)約束。它是現(xiàn)實(shí)世界屬性間相互聯(lián)繫的抽象,是數(shù)據(jù)內(nèi)在的性質(zhì),是語義的體現(xiàn)。它是資料庫規(guī)範(fàn)化理論的基礎(chǔ)。函數(shù)依賴普遍存在於現(xiàn)實(shí)生活中。例如在描述學(xué)生的關(guān)係中,可能的屬性有學(xué)號(hào),姓名,所在系等。由於一個(gè)學(xué)號(hào)只對(duì)應(yīng)於一個(gè)學(xué)生,一個(gè)學(xué)生只能屬於一個(gè)系,因此學(xué)號(hào)確定之後,該學(xué)生的姓名和所在系也唯一的確定了。類似於引數(shù)確定了,函數(shù)值也唯一確定了。起決定性的屬性相當(dāng)於引數(shù)。函數(shù)依賴記為:學(xué)號(hào)→姓名,學(xué)號(hào)→所在系。
現(xiàn)在討論一個(gè)具體的關(guān)係模式。例如,要設(shè)計(jì)一個(gè)教學(xué)管理資料庫,希望該資料庫中包括的資訊有學(xué)生學(xué)號(hào)、姓名、系名、系主任姓名,以及學(xué)生學(xué)習(xí)的課程和成績(jī)。於是得到一組屬性:
U={學(xué)號(hào),姓名,系名,系主任,課程名,成績(jī)}
根據(jù)經(jīng)驗(yàn)得知:
一個(gè)學(xué)號(hào)對(duì)應(yīng)一個(gè)學(xué)生,即一個(gè)學(xué)號(hào)對(duì)應(yīng)一個(gè)姓名,但可以有多個(gè)學(xué)生重名;
一個(gè)系有若干學(xué)生,但一個(gè)學(xué)生只屬於一個(gè)系;
一個(gè)系只有一名(正職)負(fù)責(zé)人;
一個(gè)學(xué)生可選修多門課程,每門課程有若干學(xué)生選修;
學(xué)生學(xué)習(xí)每一門課程有一個(gè)成績(jī);於是得到屬性組上的一組函數(shù)依賴:
F={學(xué)號(hào)→姓名,學(xué)號(hào)→系名,系名→系主任,(學(xué)號(hào),課程名)→成績(jī)}
定義:設(shè)R(U)是屬性集U上的關(guān)係模式。X,Y是U的子集。若對(duì)於R(U)的任意一個(gè)可能的關(guān)係r(一個(gè)滿足約束條件的數(shù)據(jù)組成的表),r中不可能存在兩個(gè)元組在X上的屬性值相等,而在Y上的屬性值不等,則稱X函數(shù)確定Y或Y函數(shù)依賴於X,記作X→Y。
定義:在R(U)中,,如果X→Y,Y→Z,且(Y
X),YX,則稱Z對(duì)X傳遞函數(shù)依賴。例如,在教學(xué)關(guān)係模式中,學(xué)號(hào)→系名,系名→系主任,所以系主任對(duì)學(xué)號(hào)傳遞依賴。
3.範(fàn)式
關(guān)係資料庫中的關(guān)係是要滿足一定要求的。滿足不同程度要求的為不同的範(fàn)式。範(fàn)式是滿足一定函數(shù)依賴的關(guān)係模式的集合。有多種範(fàn)式:第一範(fàn)式、第二範(fàn)式、第三範(fàn)式、BCN範(fàn)式等。滿足最低要求的叫第一範(fàn)式,簡(jiǎn)稱1NF。在滿足第一範(fàn)式的條件下,滿足進(jìn)一步條件的為第二範(fàn)式,簡(jiǎn)稱2NF。其餘依此類推。顯然各種範(fàn)式之間存在關(guān)係:
1NF
2NF
3NF
BCNF
4NF
5NF
一個(gè)低一級(jí)的範(fàn)式模式,通過模式分解可以轉(zhuǎn)換為若干個(gè)高一級(jí)範(fàn)式的模式集合,這個(gè)過程叫規(guī)範(fàn)化。
(1)第一範(fàn)式(1NF)定義:如果一個(gè)關(guān)係模式R的所有屬性都是簡(jiǎn)單屬性,即每個(gè)屬性都是不可再分的基本資料項(xiàng)目,則稱R屬於第一範(fàn)式,記作R∈1NF。例如,教學(xué)模式中的所有屬性都是不可再分的簡(jiǎn)單屬性,即:教學(xué)(學(xué)號(hào),姓名,系名,系主任,課程名,成績(jī))∈
1NF(2)第二範(fàn)式(2NF)定義:若一個(gè)關(guān)係模式R∈lNF,且每一個(gè)非主屬性完全函數(shù)依賴於關(guān)鍵字,則R∈2NF。
將教學(xué)模式分為以下兩個(gè)模式:學(xué)生_系(學(xué)號(hào),姓名,系,系主任);選課(學(xué)號(hào),課程名,成績(jī))在“學(xué)生_系”關(guān)係中,“學(xué)號(hào)”是關(guān)鍵字,其他非主屬性都完全依賴於關(guān)鍵字,“選課”關(guān)係中,(學(xué)號(hào),課程名)是關(guān)鍵字,非主屬性也完全依賴於關(guān)鍵字,因此兩個(gè)關(guān)係中非主屬都完全函數(shù)依賴於關(guān)鍵字,服從2NF,即: 學(xué)生_系∈2NF,選課∈2NF。
(3)第三範(fàn)式(3NF)定義:若關(guān)係模式R是第二範(fàn)式,且沒有一個(gè)非主屬性傳遞函數(shù)依賴關(guān)鍵字,則R∈3NF。R∈3NF,則非主屬性對(duì)主屬性既不部分函數(shù)依賴於關(guān)鍵字,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 吉林職業(yè)技術(shù)學(xué)院《文字學(xué)與漢字教育》2023-2024學(xué)年第二學(xué)期期末試卷
- 昆明理工大學(xué)津橋?qū)W院《過程控制系統(tǒng)》2023-2024學(xué)年第二學(xué)期期末試卷
- 陜西中醫(yī)藥大學(xué)《室內(nèi)設(shè)計(jì)與實(shí)踐》2023-2024學(xué)年第二學(xué)期期末試卷
- 華中農(nóng)業(yè)大學(xué)《公司金融》2023-2024學(xué)年第二學(xué)期期末試卷
- 湖南吉利汽車職業(yè)技術(shù)學(xué)院《土木工程施工與概預(yù)算原理》2023-2024學(xué)年第二學(xué)期期末試卷
- 廣東云浮中醫(yī)藥職業(yè)學(xué)院《園藝生態(tài)學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 長(zhǎng)春建筑學(xué)院《中學(xué)語文微型課訓(xùn)練》2023-2024學(xué)年第二學(xué)期期末試卷
- 東南大學(xué)成賢學(xué)院《果樹栽培學(xué)各論》2023-2024學(xué)年第二學(xué)期期末試卷
- 扎蘭屯職業(yè)學(xué)院《高等化工熱力學(xué)》2023-2024學(xué)年第二學(xué)期期末試卷
- 忻州職業(yè)技術(shù)學(xué)院《地理信息系統(tǒng)原理與方法》2023-2024學(xué)年第二學(xué)期期末試卷
- 網(wǎng)絡(luò)營銷講義網(wǎng)絡(luò)營銷產(chǎn)品策略課件
- 《小型混凝土預(yù)制件標(biāo)準(zhǔn)化生產(chǎn)管理辦法》
- 六年級(jí)上冊(cè)英語教案-Culture 2 Going Green 第二課時(shí) 廣東開心英語
- 警察叔叔是怎樣破案的演示文稿課件
- 青年教師個(gè)人成長(zhǎng)檔案
- 2021譯林版高中英語選擇性必修三課文翻譯
- 2022年華中科技大學(xué)博士研究生英語入學(xué)考試真題
- 《網(wǎng)店運(yùn)營與管理》整本書電子教案全套教學(xué)教案
- 打印版 《固體物理教程》課后答案王矜奉
- 中考《紅星照耀中國》各篇章練習(xí)題及答案(1-12)
- Q∕GDW 11612.43-2018 低壓電力線高速載波通信互聯(lián)互通技術(shù)規(guī)范 第4-3部分:應(yīng)用層通信協(xié)議
評(píng)論
0/150
提交評(píng)論