《數(shù)據(jù)庫管理系統(tǒng)》教案-第二章.ppt
《《數(shù)據(jù)庫管理系統(tǒng)》教案-第二章.ppt》由會員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)庫管理系統(tǒng)》教案-第二章.ppt(61頁珍藏版)》請在裝配圖網(wǎng)上搜索。
第二章 關(guān)系數(shù)據(jù)模型,2.1 關(guān)系定義 2.2 關(guān)系運算和關(guān)系演算 2.3 函數(shù)依賴 2. 4 關(guān)系規(guī)范化,2.1 關(guān)系定義,1.基本術(shù)語(terms) 關(guān)系模型并不難理解,但它是理論,大多數(shù)理論都帶有它自己的專門術(shù)語,關(guān)系模型在這方面也不例外。 基本術(shù)語如圖2.1-關(guān)系術(shù)語所示,有: 域 (domain) pool of legal values 元組 (tuple) row or record 關(guān)系 (relation) table 屬性 (attribute) column or field 度 (degree) number of columns 勢 (cardinality) number of records 主鍵 (primary key) unique identifier,,域 : 一個域就是一個數(shù)據(jù)類型(簡稱為類型), (domain) 它可能是一種系統(tǒng)定義的類型,如 INTERGER ( int ) 或CHAR ( char )。更 常見的是用戶自己定義的類型,如學(xué)生- 成績數(shù)據(jù)庫中的“學(xué)號”或“課程編號”等。 值集: 即值 的集合 (value set) 類型: 什么是一個類型呢?它是一個值的集合和 (data type) 定義在這個值集上的一組操作的總稱。,伴隨著給定的類型,就會出現(xiàn)操作符的問題:即何種 操作符能合法地應(yīng)用于給定類型的值上;也就是說, 該類型的值只能被定義在相應(yīng)類型上的操作符操作。 例如,對于INTEGER,系統(tǒng)提供: 操作符“=”、“”,等等,用來比較整數(shù)大小。 操作符“ +”、“*”,等等,執(zhí)行整數(shù)上的算術(shù)操作。 對于INTEGER,系統(tǒng)不提供: 操作符“&”(連接)、SUBSTR(取子串)等操作符用 在整數(shù)上進(jìn)行字符串操作。 換句話說,對于“INTEGER”類型系統(tǒng)不支持字符串 操作。,提示: 不同的關(guān)系數(shù)據(jù)庫管理系統(tǒng)對每一種系統(tǒng)允許的 類型所提供的操作的操作符會有所不同。 例如:Access 中提供“+”和“&”操作符來支持對字符串 的連接操作, 如,“abc” + “efg” 結(jié)果是 “abcefg” “abc” & “efg” 結(jié)果也是 “abcefg”,2. 關(guān)系的數(shù)學(xué)定義 笛卡爾積: 給定一組域 D1,D2,……,Dn ,則 D1D2……Dn ={(d1,d2, …,dn)|di∈Di,i=1,2, …,n} 稱為D1,D2,……,Dn的笛卡爾積。 其中每個(d1,d2, …,dn)叫做一個 n 元組,元組中 的每個 di 是 Di 域中的一個值,稱為一個分量。,例如, 設(shè)有域 D1 = {“張金”,“王銀”,“李玉”}, D2 = {“男”,“女”} 則對應(yīng)的笛卡爾積: D1D2 = {(“張金”, “男”), (“張金”, “女”), (“王銀”, “男”), (“王銀”, “女”), (“李玉”, “男”), (“李玉”, “女”)},關(guān)系: 簡單地說,如果把關(guān)系看作一張表,那么一個元組 就是這張表的一行,一個屬性 就是一列;元組的數(shù)目稱為勢 ,屬性的數(shù)目稱作度 ;域 是值的集合,關(guān)系中 屬性的值取自域。,這里有一個關(guān)系的精確定義: 給定一個集合,它包含n個類型或域Ti(i= 1 , 2 ,? n),這些域沒有必要各不相同。R 如果包含如下定義 的表頭(heading)和主體(body),那它就是一個關(guān)系。 a) 表頭是具有n個形式為Ai : Di的屬性的集合,其中: Ai(必須各不相同)是R 的屬性名;Ti 是相應(yīng)類型的名字(i= 1 , 2 ,?,n)。 b) 主體是一個包含m個元組 t 的集合,其中,t 依次是形式為Ai : vi 的分量的集合,vi 是類型 Di 的值,即元組t 在屬性 Ai 上的值(i= 1 , 2 ,?,n),教材中關(guān)于“關(guān)系”的定義: 設(shè)有屬性A1,A2, ……,An,它們分別在域 D1,D2,……,Dn 中取值,則笛卡爾積 D1D2……Dn 中的任何一個子集稱為 一個關(guān)系, 記為 R(A1,A2, ……,An), R ∈ D1D2……Dn 其中R為關(guān)系名,Ai為屬性名(必須不同)。,“關(guān)系” 舉例: 學(xué)生-性別(姓名,性別) = {(“張金”,“男”), (“王銀”,“男”), (“李玉”,“女”)},3. 關(guān)系的性質(zhì) 任何一個關(guān)系都具備以下特性:,關(guān)系中的每一個屬性值都必須是不能再分割的數(shù)據(jù)值。 每一列中的數(shù)值是同類型的數(shù)據(jù),來自同一個域 不同的列應(yīng)給予不同的屬性名。 同一個關(guān)系中不允許有相同的元組。 行、列的次序可以任意交換,不影響關(guān)系的實際意義。,2.2 關(guān)系運算和關(guān)系演算,任何一個 DBMS 都要提供能從 “關(guān)系” 的縱橫兩個方向(即:屬性和元組)上進(jìn)行檢索、插入、更新和刪除操作。操作的主要組成部分是關(guān)系代數(shù),它是一個操作符的集合,以關(guān)系作為操作對象,返回的結(jié)果是一 個關(guān)系。(即所謂的“關(guān)系進(jìn),關(guān)系出”) Codd 定義了一個含 8 個操作符的集合,即通常所說 的基本(original)關(guān)系代數(shù)。它們是:,1.傳統(tǒng)的集合操作符 并(union) 交(intersection) 差(difference) 笛卡爾積(Cartesian product) (所做的修改只是操作對象變?yōu)榱颂囟ǖ年P(guān)系,而不再是任意的集合) 2.專門的關(guān)系操作符 選擇(restrict,也稱為select) 投影(project) 連接(join) 除(divide),1.傳統(tǒng)的集合操作符 設(shè) R1 和 R2 為參加運算的兩個關(guān)系,如下圖所示。 它們具有相同的度,且相對應(yīng)的屬性值取自同一個 域,則可定義以下的三種傳統(tǒng)集合運算。 R1 R2,1)并( R1 ∪ R2 或 R1 UNION R2) 是相同類型的一個關(guān)系,關(guān)系的主體由出現(xiàn)在 R1 中 或 R2 中或同時出現(xiàn)在兩者之中的所有元組組成。 R1 ∪ R2 R1 R2,2)交( R1 ∩ R2 或 R1 INTERSECT R2) 是相同類型的一個關(guān)系,關(guān)系的主體由同時出現(xiàn)在兩 者之中的所有元組組成。 R1 ∩ R2 R1 R2,3)差( R1 - R2 或 R1 MINUS R2 ) 是相同類型的一個關(guān)系,關(guān)系的主體包含屬于 R1 但 不屬于 R2 的所有元組。 R1 - R2 R1 R2,4)笛卡爾積( R1R2 或 R1 TIMES R2 ) 設(shè)有關(guān)系 R1(A1,A2, … …,Am) 和 R2(B1,B2, … …,Bn) 其中 R1 和 R2 沒有共同的屬性名稱, {A1:a1,A2:a2,?,Am:am}是 R1 中的一個元組 {B1:b1,B2:b2,?,Bn:bn}是 R2 中的一個元組 兩元組的并 是一個元組: {A1:a1,A2:a2,?,Am:a m,B1:b1,B2:b2,?, Bn:bn},則 R1 與 R2 的笛卡爾積 R1R2 是一個關(guān)系,它的表頭是 R1 和 R2 表頭的并,主體 包括所有 R1 中的元組和 R2 中的元組進(jìn)行并操作而 得到的元組。注意結(jié)果的勢是 R1 的勢和 R2的勢的乘 積,結(jié)果的度是 R1 的度和 R2 的度的和。 例如, R1R2 R1 R2,2.專門的關(guān)系操作符 1)選擇σ 假設(shè)關(guān)系 A 含有屬性 X 和Y(也可能有別的),θ是 一個比較操作符,諸如“=”、“”,等等,X θ Y 為定 義好的條件(F),若給 X 和 Y 賦予具體的值,則能計 算出真值(true或false)。關(guān)系 A 在屬性 X 和 Y 上的選擇是一個關(guān)系 σF(A),關(guān)系的表頭和 A 的 一樣,主體包括所有滿足條件X θ Y 為真的元組。 例如,關(guān)系 A 如左下表,條件 F 為 [性別]=“男” , 則σF(A):,2)投影Π 投影運算是對屬性的操作,是從一個給定關(guān)系的所有 屬性中選擇某些指定的屬性 T 。 假定關(guān)系A(chǔ)有屬性X,Y,?,Z(可能還有其他的)。關(guān)系 A 在T上的投影ΠT(A)是一個滿足如下條件的關(guān)系: ? 表頭由 A 的表頭除去不包含在屬性集合T中的屬性 而得到; ? 主體包含所有形式為{X: x,Y: y , ?, Z: z}的 元組,這樣的元組是由對應(yīng)關(guān)系 A 的屬性 T 的值 組成。 注意:投影之后不僅取消了某些屬性,而且因?qū)傩詼p 少可能會出現(xiàn)重復(fù)的元組,這些元組也將自動 取消。,例如關(guān)系 A 如左下表,選擇的屬性集合 T 為 [性別] A 則ΠT(A) : 實際中經(jīng)常出現(xiàn)這種情況:指定被投影掉的屬性比指定 投影的屬性更方便。例如第13頁圖1-9 (b)所示的關(guān)系 P,可以說“從關(guān)系P中投影掉屬性 [顏色] ”,而不是 “關(guān)系P在屬性[零件號]、[零件名]、[重量]、[存放點] 上的投影”。(就像下面:P { ALL BUT WEIGHT }),3)連接 連接是從兩個關(guān)系 R 和 S 的笛卡爾積中選取滿足條 件的元組形成新的關(guān)系,記為 R F S。例如: R S R ZT S,如果條件 F 是一個相等條件,則稱為等值連接,例如 R Z=T S 。 如果是同名屬性的等值連接又稱為自然連接。例如 R Y=Y S ,簡記為 R S ,結(jié)果如下: 通常 JION 總是指自然連接。,4)除 / 除法運算表示為 R/S。應(yīng)滿足以下條件: 關(guān)系S的屬性全部包含在關(guān)系R中; 關(guān)系R的一些屬性不包含在關(guān)系S中。 運算所得結(jié)果是一個關(guān)系(T),則 T 中的屬性由 R 中 除 S 中的屬性之外的屬性組成,而 T 中的元組由 R 與 S 中在所有相同屬性上有相等值的元組組成。,例如: R S R/S,關(guān)系運算舉例: 下面提供了用在查詢中的有關(guān)關(guān)系代數(shù)表示的一些例子。對照 第13頁圖1 - 9中的數(shù)據(jù)檢驗這些例子。 1. 求提供零件 P2 的供應(yīng)商名稱 ((SP JOIN S)WHERE 零件號 = 零件號(‘P2’) ){廠名} 解釋:首先構(gòu)造關(guān)系 SP 和 S 在供應(yīng)廠號上的自然連接,從 概念上來說,它擴(kuò)展了每個 SP 元組相應(yīng)的供應(yīng)商信息(即 供應(yīng)廠號、狀態(tài)碼和廠址的值)。隨后這個連接以零件 P2 為 條件進(jìn)行了選擇。最后選擇在 供應(yīng)廠號 上做了投影。結(jié)果中 只有 供應(yīng)廠號 這一個屬性。 結(jié)果如下圖所示:,關(guān)系 SP 和 S 在供應(yīng)廠號上的自然連接:,結(jié)果:,關(guān)系運算舉例: 2. 求提供至少一個紅色零件的供應(yīng)商名稱 (((P WHERE 顏色 = 顏色 ( “紅” )) JOIN SP){供應(yīng)廠號} JOIN S){廠名} 結(jié)果唯一的屬性還是 廠名。 下面給出對同一個查詢的不同的表述: (((P WHERE 顏色 = 顏色 ( “紅” )) JOIN SP){零件號} JOIN S){廠名} 這個例子說明了一個重要的事實:對同一個查詢經(jīng)常有不同的 表述。,關(guān)系演算 前面,我們說關(guān)系模型的操作部分是基于關(guān)系代數(shù) 的,同樣我們也可以說它是基于關(guān)系演算的。 換句話說, 關(guān)系代數(shù)和關(guān)系演算是可以相互替代的。 它們之間的基本區(qū)別是: 關(guān)系代數(shù)提供了像連接、并和投影等明確的集合操作 符,并且這些集合操作符告訴系統(tǒng)如何從給定關(guān)系構(gòu) 造所要求的關(guān)系;而關(guān)系演算僅提供了一種描述 (notation)來說明所要求的關(guān)系(這一關(guān)系是根據(jù) 給定關(guān)系導(dǎo)出的)的定義。,例如第13頁圖1-9所示的關(guān)系 SP 和 S。 查詢提供零件P2的供應(yīng)廠的廠名和廠址。 此查詢的一個代數(shù)操作形式可以描述如下: 首先,根據(jù)供應(yīng)廠號連接供貨廠表(關(guān)系 S)和供貨表(關(guān)系 SP)中的元組; 其次,在上述連接結(jié)果中選擇零件號為P2的元組; 最后,將上述選擇結(jié)果在供應(yīng)廠號和廠址列上投影。,相比而言,一個演算形式可以簡單地描述為: 查取供應(yīng)廠號和廠址當(dāng)且僅當(dāng)在關(guān)系 SP 中存在這樣 的一個元組:它具有同樣的供應(yīng)廠號,且它的零件號 取值 P2。 在后一種形式中,用戶僅僅描述了所要求結(jié)果的定義 而把具體的連接、選擇等操作留給了系統(tǒng)。,提示: 關(guān)系演算是描述性(descriptive)形式的,而關(guān)系代 數(shù)是說明性(prescriptive)形式的。 關(guān)系演算描述了問題是什么,而關(guān)系代數(shù)說明了解決 問題的過程。 或者,可以說, 關(guān)系代數(shù)是過程化的(誠然,是高級的,但仍然是過 程化的);而關(guān)系演算是非過程化的。 然而,我們強調(diào)的上述區(qū)別僅僅是表面上的。實際 上,關(guān)系代數(shù)和關(guān)系演算在邏輯上是等價的。即每一 個代數(shù)表達(dá)式都有一個等價的演算表達(dá)式,每一個演 算表達(dá)式都有一個等價的代數(shù)表達(dá)式。,關(guān)系演算舉例: 下面給出一些范圍變量的例子(用供應(yīng)商表和零件表為例): RANGEVAR SX RANGES OVER S; RANGEVAR SPX RANGES OVER SP; 1. 找出提供零件 P2 的所有的供應(yīng)商的信息 SX WHERE EXISTS SPX ( SPX.S# = SX.S# AND SPX.P# = P# ( P2 ) ) 注意此原型元組中范圍變量名的使用。這個例子可以寫成以下 形式: ( SX.S#, SX.SNAME, SX.STATUS, SX.CITY ) WHERE EXISTS SPX ( SPX.S# = SX.S# AND SPX.P# = P# ( P2 ) ),關(guān)系演算舉例: 2. 找出至少供應(yīng)一個紅色零件的供應(yīng)商名 SX.SNAME WHERE EXISTS SPX ( SX.S# = SPX.S# AND EXISTS PX ( PX.P# = SPX.P# AND EXISTS PX ( PX.P# = SPX.P# AND PX.COLOR = COLOR ( Red ) ) ) 其中, SNAME 廠名 S# 供應(yīng)廠號 P# 零件號 COLOR 顏色,域演算 域演算不同于元組演算,它是定義在域上而不是定義 在元組上。 下面只給出“找出至少供應(yīng)一個紅色零件的供應(yīng)商名” 這個例子的域演算的表示: NAMEX WHERE EXISTS SX EXXISTS PX ( S ( S# : SX, SNAME : NAMEX ) AND SP ( S# : SX, P# : PX ) AND P ( P# : PX, COLOR : COLOR ( Red ))),SQL語言 一種給定的關(guān)系語言要么基于關(guān)系代數(shù),要么基于關(guān) 系演算。那么 SQL 語言是基于哪一個呢?很遺憾, SQL 只有部分基于這兩者,還有一部分并不基于它們。 下面只給出“找出供應(yīng)零件 P2 的供應(yīng)商的名字” 的 SQL 語言表示: SELECT DISTINCT S.SNAME FROM S WHERE S.S# IN (SELECT SP.S# FROM SP WHERE SP.P# = P2 );,2.3 函數(shù)依賴,在接下來的兩節(jié)中介紹數(shù)據(jù)庫的設(shè)計(更確切地說是關(guān)系數(shù)據(jù)庫的設(shè)計),數(shù)據(jù)庫設(shè)計問題可以簡單地描述為:如果要把一組數(shù)據(jù)儲存在數(shù)據(jù)庫中,該如何為這些數(shù)據(jù)設(shè)計一個合適的邏輯結(jié)構(gòu)?也即應(yīng)該有哪些關(guān)系?每個關(guān)系該有哪些屬性? 數(shù)據(jù)庫設(shè)計應(yīng)該說是一種藝術(shù)而不是一種科學(xué)。 自上而下的數(shù)據(jù)庫設(shè)計問題:從現(xiàn)實世界的實體開始,以規(guī)范的關(guān)系設(shè)計結(jié)束。,1.基本概念 為了解釋本節(jié)的一些概念,把發(fā)貨關(guān)系變量稍作修改,使它除了含有原來的屬性: S#(供應(yīng)商編號)、 P#(零件編號)和 QTY (發(fā)貨量)外,(參見下頁圖表) 增加一個屬性 CITY(城市),該屬 性表示供應(yīng)商的地址, 為了防止混淆,把這 個關(guān)系變量稱為 SCP。 關(guān)系變量 SCP的一 個可能的值見右表。,供應(yīng)商-零件 數(shù)據(jù)庫(樣本值),函數(shù)依賴 主要是指一個關(guān)系變量 中一個屬性集 和另一個屬性集間的多對一關(guān)系。例如: 在發(fā)貨關(guān)系變量 SP 中存在由屬性集{ S#,P# }到屬 性集{ QTY }間的函數(shù)依賴,它的意思是,對于關(guān)系 變量 SP 的任意一個合法的值(關(guān)系): 對于任意給定的屬性集 S# 和 P# 的值,只有一 個 QTY 的值與之對應(yīng);但是 2)可以存在許多 S# 和 P# 的不同的值,而它們所對 應(yīng)的 QTY 的值相同。 注意:我們通常所舉的 SP 的例子確實滿足以上兩個 條件。,定義1:假設(shè) r 是一個關(guān)系, X 和Y 是 r 的屬性集的任意子集,當(dāng)且僅當(dāng) r 中任一給定的 X 的值,在 r 中存在一個唯一的 Y 與之對應(yīng)。也就是說,如果 X 相等,Y 也相等,則 Y 函數(shù)依賴于 X,表示為 X→Y (讀作 X 函數(shù)決定 Y,或簡單讀作 X 指向 Y)。 例如:關(guān)系 SCP 滿足下述函數(shù)依賴: {S#}→{CITY} 可以簡記為: S#→CITY (當(dāng)且僅當(dāng) X 和Y 中只包含 一個屬性) 因為這個關(guān)系的任一給定的 S# 值都有一個給定的 CITY 與之對應(yīng)(任一給定的 CITY 值有多個 S# 與之 對應(yīng))。,事實上,該關(guān)系還滿足下列函數(shù)依賴: { S #,P # }→{ QTY } { S #,P # }→{ CITY } { S #,P # }→{ CITY,QTY } { S #,P # }→{ S # } { S #,P # }→{ S #,P #,CITY,QTY } { S # }→{ QTY } { QTY }→{ S # },現(xiàn)在,有必要分清楚以下兩種不同的情況: ( a )給定的關(guān)系變量在某一特定時間的值; ( b )給定關(guān)系變量在不同時候所有可能的值。 首先根據(jù)情況( a )討論函數(shù)依賴,然后,把函數(shù)依賴 的概念擴(kuò)展到情況( b )。 前面 定義1 給出的是符合情況 ( a ) 的函數(shù)依賴的 定義,即對關(guān)系變量的某個或某些關(guān)系適用的函數(shù)依 賴。 人們所感興趣的是對關(guān)系變量的所有可能的值都適用的函數(shù)依賴。,例如在 SCP 中,函數(shù)依賴 S# → CITY 對 SCP 的所有可能值都適用,因為在任何情況下,一個給定的供應(yīng)商有一個確定的地址(CITY),所以在 SCP 中的任意兩個元組,如果它的供應(yīng)商編號( S# )相等,則它們的地址(CITY)相等。事實上,“任何時間”都適用的函數(shù)依賴(例如對所有S C P可能的值)是關(guān)系變量 SCP 的完整性約束條件—它是對 SCP 所有被認(rèn)為合法的值的一個限制。,下面是在情況(b)下函數(shù)依賴的定義: ? 設(shè)R 是關(guān)系變量,X、Y 是R 的屬性集的任意子集,當(dāng)且僅當(dāng)對于R 的所有可能的合法值, X 的值和Y 的值密切相關(guān)。也就是說,對于R 的所有 可能的合法值,當(dāng)兩個元組的 X 值相等時,Y 值也相 等,則Y 函數(shù)依賴于X,表示為:X→Y 今后說“函數(shù)依賴”指的是要求更加嚴(yán)格的、具有時間獨立性的函數(shù)依賴,而不必詳細(xì)說明函數(shù)依賴成立的條件。,下面是關(guān)系變量S C P的一些函數(shù)依賴(具有時間獨立性的函數(shù)依賴): { S #,P # }→QTY { S #,P # }→CITY { S #,P # }→{ CITY,QTY } { S #,P # }→S # { S #,P # }→{ S #,P #,CITY,QTY } {S#} →CITY,特別要注意下列函數(shù)依賴,它們在圖1 0 - 1的情況下成立,但并不是任何時間對關(guān)系變量 SCP 都成立。 S #→QTY QTY→S # 換句話說,在前面所示的關(guān)系 SCP 中,命題“給定供應(yīng)商的發(fā)貨量是相等的”是真的,但并不是對關(guān)系變量 SCP 的所有可能的合法值都是真的。,問題: 即使只考慮任何時間都滿足的函數(shù)依賴,一個給定的關(guān)系變量的完整函數(shù)依賴集還是很龐大的,如關(guān)系變量 SCP所示(練習(xí):給出 SCP 的完整的函數(shù)依賴集)。應(yīng)該尋找一個方法把這個集合縮小到一個可管理的范圍。 給定一個函數(shù)依賴集 S,如果能找到一個集合 T,T 遠(yuǎn)遠(yuǎn)小于S,而集合 T 的函數(shù)依賴蘊涵集合 S 的所有函數(shù)依賴,則 DBMS只要實現(xiàn)函數(shù)依賴集 T,函數(shù)依賴集 S 中的所有函數(shù)依賴會自動實現(xiàn),因此,尋找函數(shù)依賴集 T 具有實踐上的重要性。,2.平凡的函數(shù)依賴和非平凡的函數(shù)依賴 縮小函數(shù)依賴集大小的一個簡單方法是消除平凡的函數(shù)依賴。 一個不可能不滿足的函數(shù)依賴稱為平凡的函數(shù)依賴。 在前面提到的關(guān)系變量 SCP 的一個函數(shù)依賴就是平凡的函數(shù)依賴,即函數(shù)依賴: { S#,P# }→ S# 事實上,當(dāng)且僅當(dāng)函數(shù)依賴的右邊是左邊的子集(不一定是真子集)時,該函數(shù)依賴才是平凡的函數(shù)依賴。 如果 X → Y ,同時 Y X ,則稱 X → Y 是非平凡的函數(shù)依賴。,2.3 關(guān)系規(guī)范化(normalization),規(guī)范化是關(guān)系數(shù)據(jù)庫理論的重要內(nèi)容。所謂的規(guī)范化 就是按照統(tǒng)一標(biāo)準(zhǔn)對關(guān)系進(jìn)行優(yōu)化(規(guī)范),以提高 關(guān)系的質(zhì)量(也稱關(guān)系具有更“好”的表示形式)。 范式: 如果一個關(guān)系滿足“每一個屬性值都是不可再分的元素” 那么該關(guān)系是一個規(guī)范化(normalized)的關(guān)系。滿足 這一要求(也是關(guān)系的最低要求)的關(guān)系叫做 第一范 式,簡記為 1NF。在此基礎(chǔ)上滿足更高要求的稱為 2NF、3NF 等。將第一范式轉(zhuǎn)換為若干高一級范式的關(guān) 系的集合的過程就叫做 規(guī)范化。,關(guān)系數(shù)據(jù)強調(diào)某些具有特定意義的信息要組合起來, 成為一個全局。在真實世界里,我們可以分出許多這 樣的特定信息,于是我們會有許多這樣的信息群 ( Information Group )。而實際工作時,我們是從 每一個信息群中提取出需要的信息,或者將修改過的 信息再“還原”(Restore)到個別的信息群中。 這個特性也符合人類思維的模式,這就是我們從小受 教育時,被訓(xùn)練出來的“歸納與分析”的能力。,在人類的思維模式里,每個不同的信息群之間都有一些特定的關(guān)系?;蛟S您不覺得,但是很奇怪的,人類就是會自動去檢索這些關(guān)系,并存在腦海里。和它相比,數(shù)據(jù)庫系統(tǒng)也是一樣,我們可以為一個目標(biāo)建立許多數(shù)椐文件,每個文件都包含某些特定類別的信息,常常我們會同時提取許多不同數(shù)據(jù)文件的信息來使用。 因此您要為每個數(shù)據(jù)文仵之間建立“關(guān)聯(lián)性”(Relation)。這個關(guān)聯(lián)性就是決定一件事:當(dāng)您需要查著某項數(shù)據(jù)時,您應(yīng)該到哪一個文件的哪些地方去尋找相關(guān)的信息。,下面介紹實用的關(guān)系規(guī)范化原則: 規(guī)則一:域的唯一性; 規(guī)則二:適當(dāng)?shù)闹麝P(guān)鍵字(Primary Key); 規(guī)則三:功能上的相關(guān)性; 規(guī)則四:域的獨立性。 下面以 “關(guān)系規(guī)范化示例-學(xué)費數(shù)據(jù)” 數(shù)據(jù)庫為例來應(yīng) 用以上四條規(guī)則進(jìn)行驗證。,域的唯一性(uniqueness) 所謂域的唯一性,是指在同一個 Table 中,每一個域 都應(yīng)該具有唯一(unique)的性質(zhì)。 也就是說,在同一個 Table 中,不應(yīng)該有兩個或兩個 以上相同性質(zhì)的域。 例如,表“學(xué)生繳費詳情”中的 {繳費項目1,金額1} 和 {繳費項目2,金額2} 具有相同性質(zhì)。 改進(jìn):去掉 域 {繳費項目2,金額2} (屬性值 轉(zhuǎn)換為 一個新的元組值) 參見表“學(xué)生繳費詳情改進(jìn)”,適當(dāng)?shù)闹麝P(guān)鍵字(Primary Key) 在一個良好的關(guān)聯(lián)性數(shù)據(jù)庫的設(shè)計里,定義適當(dāng)?shù)闹?關(guān)鍵字是非常重要的。 例如,表“院系信息” 主關(guān)鍵字 {院系代碼} 表“專業(yè)信息” 主關(guān)鍵字 {專業(yè)編號} 而 表“學(xué)生繳費詳情” 沒有 主關(guān)鍵字 改進(jìn):增設(shè)“繳費流水號” 為主關(guān)鍵字 參見表“學(xué)生繳費詳情改進(jìn)”,功能上的相關(guān)性(relativity) 這個檢查也是相當(dāng)重要的,一旦您確定 Table 里的主關(guān)鍵字之后,表示這個 Table 的主題已經(jīng)非常明確了 ,這時候您就應(yīng)該檢查一下,是否所有其它的域都是 與這個主題有關(guān)的,您應(yīng)該盡量剔除掉所有與 Table 主題無關(guān)的域。相反的,如果與這個主題有關(guān)的信息, 也應(yīng)盡量完整地納入,也就是說,整筆記錄的所有域, 要能非常充份地描述該主題,這樣才是一個好的數(shù)據(jù) 庫設(shè)計。,例如,表“學(xué)生繳費詳情” 包含的{姓名,性別,準(zhǔn)考證 號} 與 “繳費流水號” 這個主關(guān)鍵字所代表的信息含 義不相關(guān)。 改進(jìn):增設(shè)表“學(xué)生信息” 主關(guān)鍵字{學(xué)號} 參見表“學(xué)生信息” 包含需要的屬性,域的獨立性(independence ) 最后這個規(guī)則通常是最難實踐,而且也是造成 Table 修改幅度最大的關(guān)鍵。它的原則是,無論何時,當(dāng)您 修改某個域的內(nèi)容時,都不應(yīng)該去影響到其它域的內(nèi) 容,這就是域的獨立性。 例如,表“學(xué)生繳費詳情” 包含的{金額1,金額2}與 {合計金額}不獨立。 改進(jìn):去掉 {合計金額} 通過查詢可以獲得合計金額, 參見查詢“學(xué)生繳費詳情合計金額”,- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 數(shù)據(jù)庫管理系統(tǒng) 數(shù)據(jù)庫 管理 系統(tǒng) 教案 第二
鏈接地址:http://m.appdesigncorp.com/p-2745987.html