Web數(shù)據(jù)庫應(yīng)用課件_第1頁
Web數(shù)據(jù)庫應(yīng)用課件_第2頁
Web數(shù)據(jù)庫應(yīng)用課件_第3頁
Web數(shù)據(jù)庫應(yīng)用課件_第4頁
Web數(shù)據(jù)庫應(yīng)用課件_第5頁
已閱讀5頁,還剩57頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

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)係操作就是對表中的數(shù)據(jù)的處理、查詢,完整性約束就是表中的數(shù)據(jù)要滿足的條件,這些條件由資料庫系統(tǒng)自動維護,產(chǎn)生違反這些約束條件的對數(shù)據(jù)的操作會被拒絕執(zhí)行。

2.1.1關(guān)係數(shù)據(jù)結(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)是一張二維表。二維表的每一列稱為屬性。每個屬性有一個取值範圍,稱為值域。每個屬性對應(yīng)一個值域。下麵是二維表的一個實例。

學(xué)號姓名性別1張三男2李四男2關(guān)係中的基本名詞(1)關(guān)鍵字能唯一標識一行記錄或元組的一個或一組屬性。(2)候選關(guān)鍵字(Candidatekey)和主關(guān)鍵字(Primarykey)能作為關(guān)鍵字的屬性可能有很多,這些屬性稱為候選關(guān)鍵字。為數(shù)據(jù)管理方便,若一個關(guān)係有多個候選關(guān)鍵字時,指定其中一個為主關(guān)鍵字。(3)主屬性(PrimaryAttribute)和非主屬性(Non-keyAttribute)候選關(guān)鍵字中的屬性為主屬性。不包含在任何候選關(guān)鍵字中的屬性為非主屬性。3資料庫中關(guān)係的類型關(guān)係可以有三種類型:基本關(guān)係(通常稱為基本表或基表)查詢表和視圖表。

(1)基本表基本表是關(guān)係資料庫中實際存在的表,它是實際存儲數(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關(guān)係模式關(guān)係模式是對關(guān)係的描述,可以理解為表的結(jié)構(gòu)定義。關(guān)係實際上就是關(guān)係模式在某一時刻的狀態(tài)或內(nèi)容。也就是說,關(guān)係模式是型,關(guān)係是它的值。

6關(guān)係資料庫在關(guān)係模型中,實體以及實體間的聯(lián)繫都是用關(guān)係來表示。在一個給定應(yīng)用中,所有實體及實體之間聯(lián)繫的集合構(gòu)成一個關(guān)係資料庫。關(guān)係資料庫也有型和值之分。

2.1.2關(guān)係操作

關(guān)係模型給出了關(guān)係操作的能力,但不對具體的RDBMS給出具體的語法要求。關(guān)係操作語言靈活方便,表達能力和功能強大。關(guān)係模型的數(shù)據(jù)操作採用集合操作方式,即操作對象和結(jié)果都是集合。關(guān)係模型中常用的關(guān)係操作包括數(shù)據(jù)查詢、數(shù)據(jù)維護和數(shù)據(jù)控制三大功能。數(shù)據(jù)查詢指數(shù)據(jù)檢索、統(tǒng)計、排序等功能;數(shù)據(jù)維護指數(shù)據(jù)的增加、刪除、修改等數(shù)據(jù)的更新功能;數(shù)據(jù)控制是為了保證數(shù)據(jù)的安全性和完整性而採用的數(shù)據(jù)存儲控制及併發(fā)控制等功能。

2.1.3關(guān)係的完整性

1實體完整性現(xiàn)實世界中的實體是可區(qū)分的,即它們具有某種唯一性標識。相應(yīng)地,關(guān)係模型中以主鍵(主關(guān)鍵字)作為唯一性標識。主鍵中的屬性即主屬性不能取空值。所謂空值就是“不知道”或“無意義”的值。2參照完整性現(xiàn)實世界中的實體之間往往存在某種聯(lián)繫,在關(guān)係模型中實體及實體間的聯(lián)繫都是用關(guān)係來描述的。這樣就自然存在著關(guān)係與關(guān)係間的引用。

3.用戶定義的完整性

用戶定義的完整性是針對某一具體關(guān)係資料庫的約束條件,它反映某一具體應(yīng)用所涉及的數(shù)據(jù)必須滿足的語義要求。例如:某個屬性的取值不能為空,學(xué)生考試的成績?nèi)≈倒爣?到100之間。

2.2SQL語言

SQL全稱是“StructuredQueryLanguage”,即結(jié)構(gòu)化查詢語言,它目前是關(guān)係資料庫的標準語言,它是在1974年由Boyce和Chamberlin提出的。經(jīng)過不斷修改、擴充和完善,SQL語言最終發(fā)展成為關(guān)係資料庫的標準語言。由於它功能豐富、語言簡潔、易學(xué)易用,所以深受用戶和電腦工業(yè)界的歡迎,被各電腦公司和軟體公司廣泛採用。

SQL標準的影響超出了資料庫領(lǐng)域,SQL成為國際標準後,它在資料庫以外的其他領(lǐng)域也得到了重視和採用。在未來一段相當長的時間,SQL將是資料庫語言領(lǐng)域中的一個主流語言。

2.2.1SQL概述及特點

1.SQL概述

SQL是一種結(jié)構(gòu)化查詢語言,其功能並不象名稱所顯示的那樣僅僅是查詢,而是一個通用的、功能強大的關(guān)係資料庫語言。SQL從主要功能上可以分為4個部分:數(shù)據(jù)定義、數(shù)據(jù)查詢、數(shù)據(jù)操縱和數(shù)據(jù)控制。它是一個綜合的、通用的關(guān)係資料庫查詢語言。它的特點如下:

(1)功能一體化

(2)高度非過程化

(3)以同一種語法結(jié)構(gòu)提供兩種使用方式

(4)語言簡潔,易學(xué)易用

2.SQL語言的基本概念

SQL支持三級模式結(jié)構(gòu),外模式對應(yīng)於視圖和部分基本表,模式對應(yīng)於基本表,內(nèi)模式對應(yīng)於存儲檔?;颈硎仟毩⒋嬖诘谋恚粋€關(guān)係就是一個表?;颈硎前磾?shù)據(jù)全局邏輯模式建立的。全體基本表構(gòu)成了資料庫的模式。一個SQL模式(Schema)是表和約束的集合。視圖是從基本表或其他視圖中導(dǎo)出的表,它本身不獨立存儲在資料庫中,也就是說資料庫中只存放視圖的定義而不存放視圖的數(shù)據(jù),這些數(shù)據(jù)仍存放在導(dǎo)出視圖的基本表中。因此,視圖是一個虛表。2.2.2SQL數(shù)據(jù)定義

SQL的數(shù)據(jù)定義功能包括定義表、定義視圖、定義索引和定義資料庫。SQL的數(shù)據(jù)定義語句見下表。操作對象創(chuàng)建語句刪除語句修改語句基本表CREATETABLEDROPTABLEALTERTABLE索引CREATEINDEXDROPINDEXALTERINDEX視圖CREATEVIEWDROPVIEWALTERVIEW資料庫CREATEDATABASEDROPDATABASEALTERDATABASE

1.基本表的定義和維護

SQL基本表的定義和維護功能包括表的定義、修改和刪除。(1)定義基本表(CREATETABLE)

[例2-2]建立一個“學(xué)生”表,它由學(xué)號、姓名、性別、年齡、所在系五個屬性組成,年齡是整型數(shù)據(jù),其他為字元型。

CREATETABLE學(xué)生(學(xué)號CHAR(5),

姓名CHAR(20),

年齡INT,

性別CHAR(2),

所在系CHAR(20),

(2)修改基本表(ALTERTABLE)

[例2-6]刪除“學(xué)生”表中“入學(xué)時間”列。

ALTERTABLE學(xué)生

DROPCOLUMN入學(xué)時間;

(3)

刪除基本表

[例2-7]刪除學(xué)生表

DROPTABLE

學(xué)生

2.索引的定義和維護當你閱讀一本厚書時,如果你想快速找到特定的內(nèi)容,你就需要查看目錄,找到你所關(guān)心的內(nèi)容在書中的準確位置——頁碼,然後直接翻到這個位置。索引對於表,就相當於書的目錄。索引可以提高數(shù)據(jù)查詢速度??梢詫︻l繁查詢的表增加索引。只有按有索引的列查詢,索引才有作用。

(1)建立索引

(CREATEINDEX)

[例2-8]為學(xué)生表建立索引,按學(xué)號昇冪建唯一索引。

CREATEUNIQUEINDEXStusnoON學(xué)生

(學(xué)號)(2)刪除索引(DROPINDEX)

[例2-9]DROPINDEX學(xué)生.Stusno

2.2.3SQL數(shù)據(jù)查詢

資料庫查詢是資料庫的核心操作,查詢就是從資料庫中挑選、提取所需要的數(shù)據(jù)。SQL提供了SELECT語句進行資料庫的查詢,該語句使用方式靈活、功能強大。

SELECT語句的語法格式為:SELECT[ALL|DISTINCT]<目標列表達式>[,<目標列表達式>]...FROM<表名或視圖名>[,<表名或視圖名>]...[WHERE<行選擇條件>][GROUPBY<列名1>[HAVING<組選擇條件>]][ORDERBY<列名2>[ASC|DESC]];

1.簡單查詢簡單查詢是指從一個表中進行查詢,也叫單表查詢。如選擇一個表中的某些列、某些行。(1)查詢指定列[例2-10]查詢?nèi)w學(xué)生的姓名與學(xué)號。學(xué)生表中有很多列:學(xué)號,姓名,年齡,性別,所在系,而下列語句只選擇學(xué)號和姓名兩列,即查詢的結(jié)果是一個只包含兩列的新關(guān)係。

SELECT學(xué)號,姓名

FROM學(xué)生;(2)查詢?nèi)苛衃例2-11]查詢學(xué)生表的全部列:

SELECT*FROM學(xué)生也可以寫為:

SELECT學(xué)號,姓名,年齡,性別,所在系(3)查詢經(jīng)過計算的值

SELECT子句可以包含運算式,運算對象可以是常量或?qū)傩浴例2-12]查詢5年之後學(xué)生的年齡。假如資料庫中學(xué)生的年齡是今年的年齡。

SELECT學(xué)號,姓名,年齡+5FROM學(xué)生(4)消除取值重複的行一個表中兩個本來不完全相同的行,選擇部分列後,可能完全相同了。[例2-13]查詢選修了課程的學(xué)號。

SELECT學(xué)號

FROM選課如果要去掉重複行,必須指定短語DISTINCT:

SELECTDISTINCT學(xué)號

FROM選課取消了重複行,結(jié)果就是選了課的學(xué)生學(xué)號。(5)查詢滿足條件的行

WHERE子句通過條件運算式描述表中行的選擇條件。DBMS系統(tǒng)根據(jù)選擇條件掃描表中的每一行,把不符合條件的行篩選掉。WHERE子句常用的查詢條件,如下表所示:查詢條件常用謂詞比較=,>,<,>=,<=,<>,!>,!<;NOT+上述比較運算符確定範圍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]查詢有成績不及格的學(xué)生的學(xué)號

SELECTDISTINCT學(xué)號

FROM選課

WHERE成績<60②

確定範圍[例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é)生名單及課程號。

SELECT學(xué)號,課程號

FROM選課

WHERE成績ISNULL⑥

多重條件查詢?nèi)绻樵儣l件多於兩個,則要使用邏輯運算符AND和OR連接多個條件,AND的優(yōu)先順序高於OR,但可使用括弧改變運算順序。[例2-23]查詢電腦系姓趙的學(xué)生。

SELECT姓名

FROM學(xué)生

WHERE所在系='電腦系'AND姓名

LIKE'趙%'(6)對查詢結(jié)果排序如果沒有指定查詢結(jié)果的顯示順序,DBMS通常按其數(shù)據(jù)錄入的先後順序(物理存儲順序)輸出查詢結(jié)果。用戶也可以用ORDERBY子句指定按照一個或多個屬性列的昇冪(ASC)或降序(DESC)重新排列查詢結(jié)果,其中昇冪ASC為缺省值。[例2-24]查詢選修了3號課程的學(xué)生的學(xué)號及其成績,查詢結(jié)果按成績的降序排列。

SELECT學(xué)號,成績

FROM選課

WHERE課程號='3'ORDERBY成績DESC(7)使用集合函數(shù)為了進一步方便用戶,增強檢索功能,SQL提供了許多集函數(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([DISTINCT|ALL]列名)求一列值中的最大值[例2-25]查詢學(xué)生總?cè)藬?shù)。

SELECTCOUNT(*)

FROM學(xué)生[例2-26]查詢選修了課程的學(xué)生人數(shù)。

SELECTCOUNT(DISTINCT學(xué)號)

FROM選課學(xué)生每選修一門課,在選課中都有一條相應(yīng)的記錄,而一個學(xué)生一般都要選修多門課,為避免重複計算學(xué)生人數(shù),必須在COUNT函數(shù)中用DISTINCT限定詞。(8)對查詢結(jié)果分組

GROUPBY子句可以將查詢結(jié)果表的各行按一列或多列的值分組,值相等的為一組。對查詢結(jié)果分組的目的是為了細化集函數(shù)的作用對象。如果未對查詢結(jié)果分組,集函數(shù)將作用於整個查詢結(jié)果,即整個查詢結(jié)果只有一個函數(shù)值,如上面的例題,否則,集函數(shù)將作用於每一個組,即每一組都有一個函數(shù)值。[例2-28]查詢各個課程號與相應(yīng)的選課人數(shù)。

SELECT課程號,COUNT(學(xué)號)

FROM選課

GROUPBY課程號該SELECT語句對課程表按課程號的取值進行分組,所有具有相同課程號的行為一組,然後對每一組作用集函數(shù)COUNT以求得該組的學(xué)生人數(shù)。2.連接查詢一個資料庫中的多個表之間一般都存在某種內(nèi)在聯(lián)繫,它們共同提供有用的資訊。前面的查詢都是針對一個表進行的。若一個查詢同時涉及兩個以上的表,則稱之為連接查詢。連接查詢實際上是關(guān)係資料庫中最主要的查詢,主要包括等值連接查詢、非等值連接查詢、自身連接查詢、外連接查詢和複合條件連接查詢。

[例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語言中,一個SELECT—FROM—WHERE語句稱為一個查詢塊。將一個查詢塊嵌套在另一個查詢塊的WHERE子句或HAVING短語的條件中的查詢稱為嵌套查詢或子查詢。在嵌套查詢中,上層的查詢塊又稱為外層查詢或父查詢或主查詢,下層查詢塊又稱為內(nèi)層查詢或子查詢。SQL語言允許多層嵌套查詢。即一個子查詢中還可以嵌套其他子查詢。

嵌套查詢使得可以用一系列簡單查詢構(gòu)成複雜的查詢,從而明顯地增強了SQL的查詢能力。(1)帶有IN謂詞的子查詢帶有IN渭詞的子查詢是指父查詢與子查詢之間用IN進行連接,判斷某個屬性列值是否在子查詢的結(jié)果中。由於在嵌套查詢中,子查詢的結(jié)果往往是一個集合,所以謂詞IN是嵌套查詢中最經(jīng)常使用的謂詞。[例2-32]查詢選修了“數(shù)學(xué)”課的學(xué)生姓名。學(xué)生名和課程名分別在“學(xué)生”和“課程”表中,因此不能通過簡單的查詢一個表而得到結(jié)果。實際上連接學(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)帶有比較運算符的子查詢帶有比較運算符的子查詢是指父查詢與子查詢之間用比較運算符進行連接。當用戶能確切知道內(nèi)層查詢返回的是單值時,可以用>、<、=、>=、<=、2=或<>等比較運算符。[例2-33]查詢與“劉剛”同一個系的學(xué)生。這個查詢分兩步:

首先在學(xué)生表找到“劉剛”所在的系。

然後在學(xué)生表中查詢所在系與上一不的查詢結(jié)果相等的學(xué)生名單。SELECT姓名FROM學(xué)生WHERE所在系=(SELECT所在系

FROM學(xué)生

WHERE姓名='劉剛')

2.2.4SQL數(shù)據(jù)操縱

在對數(shù)據(jù)庫進行操作時,除了經(jīng)常查詢資料庫外,還要更新數(shù)據(jù)。SQL中數(shù)據(jù)更新包括插入數(shù)據(jù)(INSERT)、修改數(shù)據(jù)(UPDATE)和刪除數(shù)據(jù)(DELETE)三條語句。插入語句(INSERTINTO

)[例2-34]將一個新學(xué)生記錄(學(xué)號:95005;姓名:陳??;性別:男;所在系:電腦;年齡:18歲)插入學(xué)生表中。

INSERTINTO學(xué)生

VALUES("95020","陳俊","男",18,"電腦系");

2.刪除語句(DELETE)[例2-35]刪除學(xué)號為95001的學(xué)生記錄。

DELETEFROM學(xué)生

WHERE學(xué)號='95001';3.修改語句(UPDATE

)[例2-36]將學(xué)號為95001的學(xué)生年齡改為22歲。

UPDATE學(xué)生

SET年齡=22WHERE學(xué)號='95001'2.2.5SQL數(shù)據(jù)控制

這裏所討論的數(shù)據(jù)控制主要是指SQL語言的安全性控制功能,通過對數(shù)據(jù)庫用戶的使用權(quán)限加以限制而保證數(shù)據(jù)安全的重要措施。SQL語言的的數(shù)據(jù)控制語句包括授權(quán)(Grant)、收權(quán)或刪除許可權(quán)(Revoke)、拒絕訪問(Deny)三種,許可權(quán)的設(shè)置對象可以是資料庫用戶或用戶組。授權(quán)

[例2-37]將查詢成績的許可權(quán)授予所有人。

GRANTSELECTONTABLE成績TOPUBLIC2.收權(quán)語句資料庫管理員DBA、資料庫擁有者DBO或資料庫對象的擁有者DBOO可以通過REVOKE語句將其他用戶的數(shù)據(jù)操作許可權(quán)收回。

[例2-38]將用戶wp修改學(xué)生學(xué)號的許可權(quán)收回。

REVOKEUPDATE(學(xué)號)

ON學(xué)生

FROMwp

2.3關(guān)係數(shù)據(jù)理論

針對一個具體的問題,應(yīng)該如何構(gòu)造一個適合於它的數(shù)據(jù)模式。這是資料庫設(shè)計問題,確切地講是資料庫邏輯設(shè)計問題。關(guān)係模型有嚴格的數(shù)學(xué)理論基礎(chǔ),基於這種理論上的優(yōu)勢,關(guān)係模型可以設(shè)計的更加科學(xué),關(guān)係資料庫中的問題可以更好地解決。關(guān)係資料庫規(guī)範化理論就是資料庫邏輯設(shè)計工具。關(guān)係資料庫的規(guī)範化理論就是解決如何設(shè)計出合理的關(guān)係資料庫模式,也就是一個資料庫中要定義哪些表,每個表有哪些屬性,表之間有哪些聯(lián)繫,而儘量地減少數(shù)據(jù)冗餘,消除插入、刪除等存在的問題。2.3.1關(guān)係模式可能存在的問題

例如,要設(shè)計一個教學(xué)管理資料庫,希望在該資料庫中保存學(xué)生的學(xué)號、姓名、性別、年齡、系名、系主任和該學(xué)生選修的課程及成績資訊。若據(jù)此設(shè)計一個關(guān)係保存所有的數(shù)據(jù),關(guān)係模式為:教學(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ù)依賴理論是關(guān)係規(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)係的集合。當且僅當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)。它是資料庫規(guī)範化理論的基礎(chǔ)。函數(shù)依賴普遍存在於現(xiàn)實生活中。例如在描述學(xué)生的關(guān)係中,可能的屬性有學(xué)號,姓名,所在系等。由於一個學(xué)號只對應(yīng)於一個學(xué)生,一個學(xué)生只能屬於一個系,因此學(xué)號確定之後,該學(xué)生的姓名和所在系也唯一的確定了。類似於引數(shù)確定了,函數(shù)值也唯一確定了。起決定性的屬性相當於引數(shù)。函數(shù)依賴記為:學(xué)號→姓名,學(xué)號→所在系。

現(xiàn)在討論一個具體的關(guān)係模式。例如,要設(shè)計一個教學(xué)管理資料庫,希望該資料庫中包括的資訊有學(xué)生學(xué)號、姓名、系名、系主任姓名,以及學(xué)生學(xué)習(xí)的課程和成績。於是得到一組屬性:

U={學(xué)號,姓名,系名,系主任,課程名,成績}

根據(jù)經(jīng)驗得知:

一個學(xué)號對應(yīng)一個學(xué)生,即一個學(xué)號對應(yīng)一個姓名,但可以有多個學(xué)生重名;

一個系有若干學(xué)生,但一個學(xué)生只屬於一個系;

一個系只有一名(正職)負責(zé)人;

一個學(xué)生可選修多門課程,每門課程有若干學(xué)生選修;

學(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,記作X→Y。

定義:在R(U)中,,如果X→Y,Y→Z,且(Y

X),YX,則稱Z對X傳遞函數(shù)依賴。例如,在教學(xué)關(guān)係模式中,學(xué)號→系名,系名→系主任,所以系主任對學(xué)號傳遞依賴。

3.範式

關(guān)係資料庫中的關(guān)係是要滿足一定要求的。滿足不同程度要求的為不同的範式。範式是滿足一定函數(shù)依賴的關(guān)係模式的集合。有多種範式:第一範式、第二範式、第三範式、BCN範式等。滿足最低要求的叫第一範式,簡稱1NF。在滿足第一範式的條件下,滿足進一步條件的為第二範式,簡稱2NF。其餘依此類推。顯然各種範式之間存在關(guān)係:

1NF

2NF

3NF

BCNF

4NF

5NF

一個低一級的範式模式,通過模式分解可以轉(zhuǎn)換為若干個高一級範式的模式集合,這個過程叫規(guī)範化。

(1)第一範式(1NF)定義:如果一個關(guān)係模式R的所有屬性都是簡單屬性,即每個屬性都是不可再分的基本資料項目,則稱R屬於第一範式,記作R∈1NF。例如,教學(xué)模式中的所有屬性都是不可再分的簡單屬性,即:教學(xué)(學(xué)號,姓名,系名,系主任,課程名,成績)∈

1NF(2)第二範式(2NF)定義:若一個關(guān)係模式R∈lNF,且每一個非主屬性完全函數(shù)依賴於關(guān)鍵字,則R∈2NF。

將教學(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)鍵字,則R∈3NF。R∈3NF,則非主屬性對主屬性既不部分函數(shù)依賴於關(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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論