第2章 關係數據庫理論基礎數據庫
• 2.1 關係模型安全
• 2.2 關係代數 數據結構
• 2.3 關係數據庫 閉包
• 2.4 函數依賴 併發
• 2.5 關係模式的範式函數
• 2.6 關係模式的分解和規範化post
• 關係模型的基本要素:關係模型的數據結構、關係操做和關係的完整性約束三部分。性能
定義2.1 令D = D1×D2×…×Dn = {(d1, d2,…, dn) | di ∈Dn , i = 1,2,…,n},即D爲D1, D2, …, Dn的笛卡兒積,則D的任何非空子集R都稱爲D1, D2, …, Dn上的n元關係,其中Di爲有限的屬性值域,i = 1,2,…,n。spa
Ø 一個n元關係R一般記爲R(D1, D2, …, Dn),R中的任一元素(d1, d2,…, dn)稱爲n元組,簡稱元組(Tuple)。元組中的每一個值di稱爲份量。n稱爲關係的度或元。當n = 1時,R稱爲單元關係;當n = 2時,R稱爲二元關係。設計
Ø 注意,一個關係實際上就是若干元組的集合。一個關係必須是有限元組的集合,無限集合對數據庫技術來講是無心義的。
• 笛卡兒積能夠用二維表直觀地表示。
【例子】 假設笛卡兒積D = D1×D2×D3,D1爲學號的集合, D1={201301, 201302},D2爲姓名的集合, D2={李思思, 劉洋},D3爲英語成績(簡稱「英語」)的集合, D3={90, 85, 70}。
D = {201301, 201302}×{李思思, 劉洋}×{90, 85, 70}
= {(201301, 李思思, 90), (201301, 李思思, 85), (201301, 李思思, 70), (201301, 劉洋, 90), (201301, 劉洋, 85), (201301, 劉洋, 70),
(201302, 李思思, 90), (201302, 李思思, 85), (201302, 李思思, 70),
(201302, 劉洋, 90), (201302, 劉洋, 85), (201302, 劉洋, 70)}。
• 由定義2.1,D爲一個笛卡兒積,D的任意子集都是三元關係。
【例子】令R = {(201301, 劉洋, 70), (201302, 李思思, 90)},R 爲D的一個子集,因此R 爲3元關係。
• 這個關係記做R(D1, D2, D3),其對應二維表示如表2.2所示。
• 笛卡兒積D自己也是一種關係,但這種關係因爲過於泛化而可能會致使語義上的矛盾,從而失去實際意義。通常來講,只有部分關係有意義,而不是所有。
【例子】 元組(201301, 劉洋, 90)和元組(201301, 劉洋, 85)就是一對矛盾的元組,由於學號「201301」、姓名爲「劉洋」的學生的英語成績不可能同時取90分和85分這兩個值。
• 數據庫理論中的一些概念;
Ø 關係:一個關係等同於一張二維表,是有限元組的集合;一個數據庫能夠視爲若干關係的集合
Ø 元組:二維表中的一行對應一個元組,也稱爲記錄。
Ø 由表2.2所示,「201301」,「「劉洋」和「70」構成的行就是元組(201301,劉洋, 70)。
Ø 屬性:二維表中的每一列都稱爲屬性或字段。
Ø 域:即屬性的值域,也就是屬性的取值範圍。
Ø 由表2.2所示,「學號」這個屬性的值域爲{201301, 201302}。
Ø 份量:一個元組中的一個屬性值,也常稱爲數據項。
Ø 由表2.2所示,「劉洋」、「70」等都是數據項。數據項不能再分了,它是關係數據庫中最小的數據單位。
Ø 候選碼和主碼:若是二維表中存在一個屬性或若干屬性組合的值可以惟一標識表中的每個元組,則該屬性或屬性組合就稱爲候選碼,簡稱碼;若是一個表存在候選碼,且從中選擇一個候選碼用於惟一標識每個元組,則該候選碼稱爲主碼(Primary key)。主碼也常稱爲主健(主關鍵字段)。
Ø 主屬性和非主屬性:包含在任何候選碼中的屬性都稱爲主屬性,不包含在任何候選碼中的屬性稱爲非主屬性。
• 關係的性質:
Ø 列是同質的,即每一列中的份量是同一類型的數據,它們都是來自同一個域。
Ø 每一列爲一個屬性,不容許存在相同屬性名的狀況。
Ø 列(行)的順序是任意的,列(行)的次序能夠任意交換。
Ø 不容許存在兩個相同的元組。
Ø 每個份量都是不可再分的,即不容許表中套表。
定義2.2 假設一個n元關係R的屬性分別爲A1, A2, …, An,令R(A1, A2, …, An)表示關係R的描述,稱爲關係模式。
Ø 關係模式是由屬性構成,與屬性值無關。爲了體現關係模式中的主碼,對構成主碼的屬性添加下劃線。
【例子】在關係模式R(A, B, C, D, E)中,屬性A和B的組合是該關係模式的主碼。
Ø 關係模式是描述關係的「型」,即凡是具備相同屬性的關係都屬於相同的「型」,即它們都屬於同一個關係模式。
Ø 一個關係模式能夠視爲一類具備相同類型的關係集合,屬於同一個關係模式的關係都擁有相同的屬性(但屬性值卻不必定相同)。
Ø 一個特定的關係是其對應關係模式的「值」,或者說關係是關係模式這個集合中在某一時刻的一個「元素」。
Ø 關係和關係模式的區別和聯繫:
• 關係和關係模式之間的聯繫就好像是數據類型和數據之間的聯繫。
• 關係模式和關係是有區別的,即前者是後者的抽象,後者是前者的特定實例
• 關係模式是相對穩定的,數據在更新,關係是隨時間變化的。但在運用中經常將它們統稱爲關係,讀者可根據上下文來區分。
• 關係操做的分類:查詢操做、更新操做
• 查詢操做是最經常使用和最主要的操做,其包括:
Ø 選擇:從關係中檢索出知足既定條件的全部元組的集合,這種操做就稱爲選擇。其中,選擇的條件是以邏輯表達式給出的,使表示式的值爲真的元組被選取。從二維表的結構上看,選擇是一種對行的操做。(最經常使用)
Ø 投影:從關係中選出若干個指定的屬性來組成新的關係,這種操做就稱爲投影。從二維表的結構上看,選擇是一種對列的抽取操做。
Ø 鏈接:從兩個關係中抽出知足既定條件的元組,並將它們「首尾相接」地拼接在一塊兒,從而造成一個新的關係,這種操做稱爲鏈接。
Ø 除:一種行列同時參加的運算。
• 如下三個選擇操做的共同特色是,參加運算的兩個關係必須有相同的屬性個數,且相應屬性的取值分別來自同一個域(屬性名能夠不一樣):
Ø 並:將兩個關係中的元組合併到一塊兒(縱向),從而造成一個新的關係,這種操做稱爲並。
Ø 交:將兩個關係中的共同元組組成一個新的關係,這種操做稱爲交。
Ø 差:將第一個關係中的元組減去第二個關係中的元組,從而也產生了新的關係,這種操做稱爲差。
• 更新操做種類:(最經常使用)
Ø 插入:把一個關係(元組的集合)插入到已有的關係中,造成新的關係。
Ø 刪除:從一個關係中刪除知足既定條件的全部元組,剩下的元組構成新的關係。
Ø 修改:利用給定的值更改關係中知足既定條件的全部元組的對應份量值,更改後獲得新的關係。
• 關係操做的特色:
• 針對集合進行,即操做的對象是元組的集合,操做後所獲得的結果也是元組的集合。
• 非關係模型(網狀模型和層次模型)的操做對象是一個元組。
關係是關係模型的數據結構。關係須要知足一些基本要求——關係的完整性約束。
完整性約束包括:實體完整性約束、參照完整性約束、用戶定義的完整性約束。
1.實體完整性
Ø 每個關係中的主碼屬性的值不能爲空(NULL),可以惟一標識對應的元組。
緣由:主碼設置的目的是用於區分關係中的元組,以將各個元組區別開來。若是主碼中的屬性值能夠爲空,那麼在關係中將存在一些不肯定的元組,這些元組將不知道是否可以與別的元組有區別(由於空值被系統理解爲「不知道」或「無心義」的值),這在關係模型中是不容許的。各個元組在主碼上的取值不容許相等,不然就不知足實體完整性約束。
Ø 實體完整性是關係模型必須知足的完整性約束條件。
【例2.1】考慮如表2.3所示的學生關係student(學號, 姓名, 性別, 專業號)和表2.4所示的課程關係course(課程號, 課程名, 學分)。假設學生關係的主碼爲「學號」,課程關係的主碼爲「課程號」,那麼學生關係的「學號」以及課程關係的「課程號」的取值就不能爲空,並且取值不能重複(能惟一標識每一行),不然就不知足實體完整性。
2. 參照完整性
Ø 參照完整性與外碼密切相關,這裏先介紹外碼的概念。
Ø 對於關係R和S,假設F是關係R的一個屬性或一組屬性,但F不是R的碼,K是關係S的主碼,且F與K相對應(或相同),則F稱爲R的外碼(Foreign key),R和S分別稱爲參照關係(Referencing relation)和被參照關係(Referenced relation),如圖2.1所示。
• F與K是相同的屬性或屬性集,它們的取值範圍相同。
• 關係模型的參照完整性約束:外碼F中的每一個屬性值等於主碼K的某一個屬性值或F的每一個屬性值均爲空值。
• 若是要在關係R中插入一個元組,則該元組在屬性F上的取值等於關係S中某一個元組在主碼K上的取值或全置爲空值,不然不能插入該元組。當關系S爲空時,不能向關係R中插入元組;當要刪除關係S中的一些元組時,必須先刪除關係R中與這些元組相關聯的元組。
• 參照完整性也是關係模式必須知足的完整性約束條件。
【例子】選課關係SC(學生編號, 課程編號, 成績),如表2.5所示。可見屬性組{學生編號,課程編號}爲該關係的主碼。
屬性「學生編號」是選課關係的外碼,它與關係「student(學號, 姓名, 性別, 專業號)」的主碼「學號」相對應,選課關係爲參照關係,學生關係爲被參照關係,「課程編號」同理。
• 外碼「學生編號」和「課程編號」共同組成了該關係的主碼,這兩個屬性的取值不能爲空,只能爲相應被參照關係中相應列中的取值。
【例子】表2.5中「學生編號」列的屬性值「201301」必須等於表2.3中「學號」列中的某一個屬性值;表2.5中的「課程編號」列的屬性值「13989」必須等於表2.4中「課程號」列中的某一個屬性值。
• 表2.6所示的專業關係major(專業編號, 專業名),該關係的主碼是「專業編號」,且表2.3所示關係「學生」中的「專業號」與該關係中的「專業編號」相對應,即「專業號」是學生關係student的外碼。在這種狀況下,因爲學生關係student中的「專業號」不是該關係的主碼,於是「專業號」列的屬性值能夠取空值。
【例子】表2.3中學生「李鑫」所對應的「專業號」爲空值,這代表還沒有給該學 生分配專業。
3.用戶定義的完整性
l 用戶定義的完整性是指由用戶定義的、針對某一具體應用需求制定的約束條件,多用於知足數據的一些語義要求。
【例子】在表2.5所示的關係SC中,常常定義這樣的約束:成績的取值必須在0~100之間;又如,某些屬性值不能爲空或取值必須惟一等。
l 用戶定義完整性約束能夠有效減小應用程序的負擔,關係數據庫管理系統都提供定義和檢驗這類完整性的機制和方法。
基本集合運算是指集合的並、交、差和笛卡兒積運算,這些運算都是二元運算。咱們約定:本節中R和S都默認是n元關係,且對應屬性取自同一個值域。如下介紹基於關係的基本集合運算。
1. 並∪
Ø n元關係R和S的並是一種新的n元關係,這個新的關係是由R的元組或S的元組組成,記爲R∪S,即R∪S = {x | x∈ R∨x ∈ S}
2. 交∩
Ø n元關係R和S的交是一種新的n元關係,這個新的關係是由R和S的共同元組組成,也就是說,由既屬於R的元組又屬於S的元組組成,記爲R∩S,
即R∩S = {x | x ∈ R ∧ x ∈S }
3. 差-
Ø n元關係R和S的差是一種新的n元關係,這個新的關係是由屬於R的元組但不屬於S的元組組成,記爲R-S,即R-S = {x | x ∈ R∧x ∈S}
4. 笛卡兒積
Ø 設R和S分別是n元關係和m元關係,則R和S的笛卡兒積是一種(n + m)元關係,該關係是由R的每個元組分別與S每個元組進行「首尾並接」所獲得的元組的集合,記爲R×S,即R×S = {xr xs| xr ∈ R∧ xs ∈ S}
Ø xrxs是表示由元組xr和元組xs並接而獲得的新元組。
【例子】若是xr =(1班,李好,78)且xs =(03987,陳永江,01,3班),
則xrxs =(1班,李好,78,03987,陳永江,01,3班)。
Ø 關係R和S的元組個數分別爲kr和ks,則R×S的元組個數爲kr×ks。
關係一些特殊的運算,主要包括選擇(σ)、投影(π)、鏈接(⋈ )、除(/)等。
Ø 先約定一種表示方法:設x爲某一個關係R的一個元組,L爲R的關係模式的一個子集(即屬性子集),則令x(L)表示由元組x在屬性子集L上的全部份量構成的新元組。
【例子】對於關係R(A,B,C,D),令x = (a , b ,c , d),則x({A,B,C}) = (a , b , c),x({C,D}) = (c , d),x({B}) = (b),等。
• 選擇σ
從關係中篩選出知足既定條件的元組,這些元組組成了一個新的關係,這個操做過程稱爲選擇。
Ø 選擇的操做符用σ表示,選擇條件則用邏輯公式來表示,用R表示邏輯公式。對關係R的選擇運算就能夠表示爲σt(R),即
σt(R) = {x | x∈R∧t(x) = true}
「t(x) = true」表示元組x知足條件公式t。對於選擇運算,關鍵是設置選擇條件t。
在數據查詢中,條件公式t一般是由<、>、≤、≥、=、between、∧、∨等鏈接符號構成的條件表達式或邏輯表達式。
【例子】表2.3所示的學生關係student。令選擇條件t = (性別=‘男’∧專業號=‘z3’),則選擇運算st(student)表示查找那些專業號爲「z3」的男同窗,結果如表2.7所示。
2. 投影π
l 投影是指從關係中選出若干個指定的屬性來組成新的關係。令投影的操做符爲π,L爲指定的屬性子集,則關係R在屬性子集L上的投影就能夠表示爲πL(R),即 πL(R) = {x(L) | x ∈ R}
x(L)表示由元組x在屬性集L上的取值構成的新元組。
l 投影還有一種表示方法就是在投影運算表達式πL(R)中用指定的屬性在關係R中的序號來代替L中的屬性名。
【例子】對於上述的投影π{姓名,性別} (student)也能夠表示爲π{2,3}(student)。
l 投影就是從關係表中按指定的屬性抽取相應的列,這些列組成一個新的關係。
l 注意,投影運算是對列進行篩選,而選擇運算則對行進行篩選。
【例子】對於表2.3所示的學生關係student,令L = {姓名,性別},則學生關係在L上的投影:
πL(student) = {x(L) | x∈ R}
= {x({姓名,性別}) | x∈ R}
= {(劉洋,男), (李思思,女), (陳永江,男), (王大河,男), (呂文星,男), (李鑫,女)}
結果如表2.8所示。
3. 鏈接 ⋈
鏈接運算是二元運算,即涉及到兩個關係的運算。假設參與運算的兩個關係是R和S,則鏈接運算的結果是R和S笛卡兒積中知足屬性間既定條件的元組的集合,即它是R和S笛卡兒積的一個子集。鏈接運算經常使用的主要有兩種:等值鏈接和天然鏈接。
1)等值鏈接
對於關係R和S,假設F和M分別是關係模式R和S的屬性子集,若是按照F和M進行鏈接,則R和S的等值鏈接表示爲:
xrxs表示由元組xr和xs鏈接起來而構成的新元組。等值鏈接R S是R和S笛卡兒積的一個子集,子集中的元組在F和M上的取值相等。
2)天然鏈接
天然鏈接是一種特殊的等值鏈接,它是在等值鏈接的基礎上加上兩個條件:
(1)參與比較的屬性子集F 和M 必須是相同的,即F=M;
(2)造成的新關係中不容許存在重複的屬性,若是有則去掉。R和S的天然鏈接能夠表示爲:
F是關係R和S都包含的屬性(組)。
表2.9和表2.10所示的兩個關係,分別表示學生的基本信息和學生的考試成績。
等值鏈接stu_info⋈ 年齡=高數grade和stu_info⋈ 姓名=姓名grade以及
天然鏈接stu_info ⋈ 姓名grade的結果分別見表2.十一、表2.12和表2.13所示。
從這三個結果的對比中讀者不難比較這幾種鏈接的區別。
4. 除/
對於關係模式R(LR)和S(LS),約定:
LR --- R的屬性集
LS --- S的屬性集
L = LR ∩LS (即L表示關係R和關係S的公共屬性)
Lx = {t(L) | t∈R∧t(LR-L)=x} (其中,x∈πLR -L(R) ,Lx稱爲x在R中關於L的像集)
R和S的除運算產生一個新關係R/S:
該新關係由投影 x∈πLR -L(R)中的某些元組組成,這些元組在R中關於L的像集包含S在L上的投影πL(S)。即:
相同部分所在行
關係數據庫(Relation database)是以關係模型爲基礎的數據庫,它是利用關係來描述實體及實體之間的聯繫。簡單地說,一個關係數據庫是若干個關係的集合。一個關係可表示爲一張二維表(也稱數據表),一個關係數據庫也能夠理解爲若干張二維表的集合。
Ø 一張數據表是由一系列的記錄(行)組成,每一條記錄由若干個數據項組成。數據項也是前面講到的字段值、屬性值,是關係數據庫中最小的數據單位,不能再分解。
Ø 每一張數據表都有本身的表名。在同一個數據庫中,表名惟一。當要訪問數據庫中的某一個數據項時,先經過表名找到相應的數據表,而後檢索到該數據項所在的記錄,最後經過記錄訪問到該數據項。
Ø 「元組」、「份量」等概念多用於描述關係模型,可理解爲理論範疇中的概念;而「記錄」、「數據項」則分別是「元組」、「份量」在關係數據庫中的映象,理解爲它們的實例化對象。它們基本上是對應的。這種對應關係說明如表2.15所示(但這種對應關係不是嚴格的,在使用中要視上下文而定)。
關係數據庫的主要特色和優勢包括:
Ø 具備較小的數據冗餘度,支持建立數據表間的關聯,支持較爲複雜的數據結構。
Ø 應用程序脫離了數據的邏輯結構和物理存儲結構,數據和程序之間的獨立性高。
Ø 實現了數據的高度共享,爲多用戶的數據訪問提供了可能。
Ø 提供了各類相應的控制功能,有效保證數據存儲的安全性、完整性和併發性等,爲多用戶的數據訪問提供了保證。
定義2.3 設R(U)是屬性集U上的一個關係模式,A, B ⊆ U,對於R(U)的任意一個可能的關係r,若關係r的兩個元組x1, x2知足x1(A) = x2(A),則必有x1(B) = x2(B),那麼A函數決定B,或稱B函數依賴於A,記爲A→B,A中的每一個屬性都稱爲決定因素(Determinant),其中x1(A)表示元組x1在屬性集A上的取值。若是A→B且B→A,則記爲A↔B;若是A→B不成立,則記爲 AB。
Ø 函數依賴不是指關係模式R(U)的某一個或某一些關係知足的約束條件,而是指關係模式R(U)的全部關係均須要知足的約束條件。
【例2.2】表2.3所示的學生關係模式student(學號, 姓名, 性別, 專業號)。學號是不容許重複的,若是學號相同的兩個學生元組在其餘屬性上的取值確定相同,能夠推出{學號} →{姓名}, {學號} → {性別}, {學號} → {專業號}。
l 屬性間的這種函數依賴關係跟語義有關,它屬於語義範疇的概念。
【例子】 若是不容許出現重名的學生元組,則能夠有{姓名} →{學號},進而{學號} ↔ {姓名}。
l 若是屬性集是由單個屬性構成,標誌集合的大括號「{」和「}」能夠省略,如「{學號} →{姓名}」能夠寫成「學號→ 姓名」。
l 注意,在實際數據庫開發中,能夠從用戶提供的需求說明中或是從基本常識中獲取函數依賴關係,例如上述「學號→ 姓名」就是一個基本常識。
定義2.4 設R(U)是屬性集U上的一個關係模式,A,B ⊆ U。若A→B是一個函數依賴,若是B→A,則稱A→B爲一個平凡函數依賴;若是B⊄A,則稱A→B爲一個非平凡函數依賴。
Ø 對於任意B⊆A,顯然有A→B,它是一種平凡函數依賴。
【例子】「{學號, 姓名} → 姓名」是一種平凡函數依賴。因爲平凡函數依賴沒有實際意義,通常不予以討論,在默認狀況下提到的函數依賴均指非平凡函數依賴。
定義2.5 設R(U)是屬性集U上的一個關係模式,A, B ⊆ U。若A→B是一個函數依賴,而且對於任意C ⊆ A且C非空,均有C B,則稱A→B是一個徹底函數依賴(Full functional dependency),即B徹底函數依賴於A,記爲AB;不然稱A→B是一個部分函數依賴(Partial functional dependency),即B部分函數依賴於A,記爲AB。
【例2.3】表2.5所示的選課關係模式SC(學生編號,課程編號,成績),{學生編號, 課程編號} 成績,由於學生編號 成績且課程編號 成績。又如,表2.3所示學生關係模式student(學號, 姓名, 性別, 專業號),{學號, 姓名} 性別,確實有{學號, 姓名} → 性別,但學號→性別。
Ø 對於函數依賴A→B,若是A只包含一個屬性,則必有A B中,由於這時的A不存在非空真子集。
定義2.6 設R(U)是屬性集U上的一個關係模式,A, B, C Í U。若A→B (B⊄A, B A),且B→C成立,則稱C傳遞函數依賴於A,記爲A C。
Ø 注意,此處加上條件B A,是由於若是B→A,則實際上變爲A↔B,即A→C,而不是A C。
【例2.4】 對於關係模式—分班(學號, 班級號, 班長),容易知道學號→ 班級號,班級號→ 班長,又由於班級號
學號,因而學號 班長。
定義2.7 在關係模式R(U)中,假設A ⊆ U,若是A U,則A稱爲關係模式R(U)的一個候選碼;候選碼可能有多個,從候選碼中選擇一個用於惟一標識關係中的每個元組,則該候選碼稱爲主碼(Primary key)。
Ø 含在任何候選碼中的屬性稱爲主屬性(Prime attribute),不包含在任何碼中的屬性稱爲非主屬性(Nonprime attribute)。一般將主碼和候選碼都簡稱爲碼。最簡單的狀況,單個屬性構成碼;最極端的狀況,一個關係模式的全部屬性構成碼,稱爲全碼(All key)。
Ø 對於候選碼和主碼,須要說明幾點:
• 爲正確理解候選碼A,應該牢牢抓住其如下兩個特性:
A能夠函數決定U,即A→U。
A具備極小性,即A的任何真子集都不可能函數決定U。
• 候選碼可能有多個。若是有多個候選碼,則它們的地位是平等的,任何一個均可以被設置爲主碼。在應用當中,通常是根據實際須要來將某一個候選碼設置爲主碼。
定理2.1 在關係模式R(U)中,對任意A, B ⊆U且A ∪ B = U,若是A B,則有A U,從而A是關係模式R(U)的一個候選碼。
【例2.5】 考慮如表2.16所示的學生成績關係模式,其中U = {學號, 姓名,系別,成績}。對於屬性「學號」,容易驗證:學號 {姓名,系別,成績},而{學號}∪{姓名,系別,成績} = U。根據定理2.1,「學號」是學生成績關係模式的一個候選碼。
Ø 1974年Armstrong首次提出了這樣的一套推理規則,由此構成的系統就是著名的Armstrong公理系統。
Ø 在關係模式R(U)中,假設A, B, C, D爲U的任意子集。在Armstrong公理系統中,基於函數依賴集F的推理規則能夠歸結爲如下3條:
ü 自反律:若C ⊆ B,則B→C爲F所蘊含(平凡函數依賴)。
ü 增廣律:若B → C爲F所蘊含,則B∪D→C∪D爲F所蘊含。
ü 傳遞律:若B→C且C→D爲F所蘊含,則B→D爲F所蘊含。
Ø 基於上述的推理規則,進一步獲得下列的推理規則:
ü 自合規則:B→B。
ü 合併規則:若B→C且B→D,則B→C∪D。
ü 分解規則:若B→C∪D,則B→C且B→D。
ü 符合規則:若A→B且C→D,則A∪C→B∪D。
ü 僞傳遞規則:由B→C,A∪C→D,有A∪B→D。
定理2.2 在關係模式R(U)中,B及B1, B2,…, Bn是U的子集,則B→B1∪B2∪…∪Bn成立的充分必要條件是B→Bi成立,其中i = 1,2,…,n。
Ø 範式一共分爲六個等級,從低到高依次是第一範式(1NF)、第二範式(2NF)、第三範式(3NF)、BC範式(BCNF)、第四範式(4NF)和第五範式(5NF)。
Ø 高等級範式是在低等級範式的基礎上增長一些約束條件而造成的,等級越高,範式的約束條件就越多,要求就越嚴格。各類範式之間的包含關係能夠描述以下:
5NF ⊆ 4NF ⊆ BCNF ⊆ 3NF ⊆ 2NF ⊆ 1NF
Ø 經過模式分解,能夠將一個低級別的範式轉化爲若干個高一級的範式,而這種轉化過程稱爲規範化。
定義2.8 設R(U)是一個關係模式,U是關係R的屬性集,若U中的每個屬性a的值域只包含原子項,即不可分割的數據項,則稱R(U)屬於第一範式,記爲R(U)∈1NF。
【例子】表2.17所示。該數據表所對應的關係模式不屬於第一範式,由於其中每一個元組在「學生人數」屬性上的屬性值都不是原子項,它們均可以再分,實際上它們都是由兩個原子項複合而成。爲將其轉化爲第一範式,須要將複合項(非原子項)分解爲原子項便可,結果如表2.18所示。
【例2.6】假設有一個研究生信息管理系統,該系統涉及的信息主要包括導師信息、研究生信息以及所選課程信息(supervisor, student, course)等。設計了以下的一個關係模式: SSC(學號, 姓名, 系別, 導師工號, 導師姓名, 導師職稱, 課程名稱, 課程成績) 。
根據常識能夠知道:
• 一位研究生只有一位導師(不含副導師),但一位導師能夠指導多位研究生;
• 一位研究生能夠選修多門課程,一門課程也能夠被多位研究生選修;
• 一位研究生選修一門課程後有且僅有一個成績;
• 不一樣的課程,課程名是不相同的,即課程名是惟一。
基於以上語義信息能夠知道:
• 學號→{姓名, 系別}
• 學號→導師工號
• 導師工號→{導師姓名, 導師職稱}
• {學號, 課程名稱}→課程成績
Ø根據Armstrong公理及定理2.2能夠推知:
{學號, 課程名稱}→{學號, 姓名, 系別, 導師工號, 導師姓名, 導師職稱, 課程名稱, 課程成績}
Ø且能夠進一步推知:
{學號, 課程名稱} {學號, 姓名, 系別, 導師工號, 導師姓名, 導師職稱, 課程名稱, 課程成績}
Ø根據定義2.7,{學號, 課程名稱}是關係模式SSC的候選碼,其實是惟一的候選碼,因此故只能選擇它爲模式的主碼。
關係模式SSC存在的缺點:
• 數據冗餘
關係中每一個元組既包含研究生信息,也包含導師信息以及所選課程的信息。一位導師可指導多名研究生,每一個研究生對應的元組都包含同一個導師的相同信息。一位導師帶有多少名研究生就有多少條重複的導師信息。形成了數據冗餘,若是數據量很大,就會浪費大量的存儲空間,爲這些數據的維護付出巨大的代價。
• 插入異常
假設某個老師剛剛被聘爲研究生導師,但尚未招收學生(這種狀況常常出現),這時也就沒有他的研究生信息和研究生選修課程的信息,意味着「學號」和「課程名稱」等屬性的屬性值爲空(null)。若是這時在關係SSC中插入該導師的信息,則會產生異常。由於屬性「學號」和「課程名稱」是主碼,其取值不能爲空。這種異常就是插入異常。插入異常的存在使得添加導師信息的操做沒法完成。
• 刪除異常
假設某個導師剛招收了兩名研究生,但過了一個學期之後,這兩個研究生都因出國而註銷學籍了。註銷時,將這兩個研究生對應的元組從關係SSC中刪除(所有刪除)。因爲刪除操做是以元組爲單位進行的,因此導師信息也將所有被刪除,之後就沒法使用該導師的信息了,稱爲刪除異常。
關係模式SSC還容易產生數據不一致等其餘的一些問題。僅知足第一範式的關係模式確實還存在許多問題。人們在第一範式的基礎上增長一些約束條件,從而獲得第二範式。
定義2.9 設R(U)是一個關係模式,若是R(U)∈1NF且每一個非主屬性都徹底函數依賴於任一候選碼,則稱R(U)屬於第二範式,記爲R(U)∈2NF。
l 第二範式是在第一範式的基礎上,增長了條件「每一個非主屬性都徹底函數依賴於任一候選碼」,它比第一範式具備更高的要求。
l 若是一個關係模式的候選碼都是由一個屬性構成,該關係模式確定屬於第二範式,此時每一個非主屬性都顯然徹底函數依賴於任一候選碼。
l 若是一個關係模式的屬性全是主屬性,則該關係模式也確定屬於第二範式,此時不存在非主屬性。
【例2.7】例2.6中的關係模式SSC(學號, 姓名, 系別, 導師工號, 導師姓名, 導師職稱, 課程名稱, 課程成績)。該關係的惟一候選碼爲{學號, 課程名稱},所以「姓名」, 「系別」, 「導師工號」, 「導師姓名」, 「導師職稱」, 「課程成績」等6個屬性爲其非主屬性。不存在「學號」相同而「姓名」不一樣的研究生元組,「姓名」函數依賴於「學號」,即「學號→ 姓名」。非主屬性「姓名」並不是徹底函數依賴於碼{學號, 課程名稱},此關係模式不屬於第二範式。
Ø 由於關係模式SSC僅屬於第一範式而不屬於第二範式,這決定了它還存在數據冗餘、插入異常和刪除異常等問題。咱們經過模式的投影分解,將之分解爲若干個子模式,使得每一個子模式都屬於第二範式,從而解決上述問題。
Ø 先考察關係模式SSC中的函數依賴:
ü 學號→姓名
ü 學號→系別
ü 學號→導師工號
ü 導師工號→導師姓名
ü 導師工號→導師職稱
ü {學號, 課程名稱} 課程成績
l 因爲「學號」和「導師工號」都是單屬性,所以上述函數依賴都是徹底函數依賴,一共有三種類型,所以在進行投影分解後可獲得以下的三個關係模式:
Ø Student(學號, 姓名, 系別, 導師工號)
Ø supervisor(導師工號, 導師姓名, 導師職稱)
Ø course(學號, 課程名稱, 課程成績)
l 這三個關係模式的碼分別爲學號、導師工號和{學號, 課程名稱},每一個關係模式中非主屬性都徹底函數依賴於碼。這三個關係模式都屬於第二範式。
l 利用基於外碼的天然鏈接能夠將這三個關係合成原來的關係SSC,即 SSC = student⋈ 導師工號supervisor ⋈學號course。外碼的設置如:「導師工號」是student的關於supervisor的外碼,「學號」是course的關於student的外碼。
l 一個關係模式的碼都是由一個屬性構成,該關係模式確定屬於第二範式,由於這時每一個非主屬性都顯然徹底函數依賴於碼。
【例2.8】設有關係模式teacher(課程名, 任課教師名, 任課教師職稱),表2.19爲關係模式teacher的一張關係表。假設每名教師能夠上多門課,每門課只由一名教師上,請問關係模式teacher屬於幾範式?
關係模式teacher的候選碼只有「課程名」,而「任課教師名」和「任課教師職稱」都是非主屬性。顯然有函數依賴集{課程名→任課教師名, 任課教師姓名→任課教師職稱, 課程名任課教師職稱},即每一個非主屬性都徹底依賴於候選碼,故關係模式teacher屬於2NF。
上例中關係模式teacher屬於2NF,仍存在數據冗餘和插入、刪除操做異常。
【例子】若某任課教師上多門課,則須要在teacher表中存儲屢次該教師的職稱信息(數據冗餘);對於一個新來教師,若是其尚未排課,那麼將沒法輸入該教師的信息,由於課程名做爲主碼不能爲空(插入異常);又如刪除一個任課教師的全部任課記錄,則找不到該任課教師姓名和職稱信息了(刪除異常)。致使這種數據冗餘和操做異常的緣由在於該關係模式中存在傳遞函數依賴,這將在2.5.3節舉例說明。
定義2.10 設R(U)是一個關係模式,若是R(U)∈2NF且每一個非主屬性都不傳遞函數依賴於任一候選碼,則稱R(U)屬於第三範式,記爲R(U)∈3NF。
注意,若是一個關係模式的屬性全是主屬性,那該關係模式確定屬於第三範式,由於該關係模式不存在非主屬性。
【例2.9】假設有一個關於學生選課信息的關係模式——s_c(學號, 課程號, 名次),其相關語義是:學號和課程號分別是學生和課程的惟一標識屬性,每一名學生選修的每門課程有一個名次,且名次不重複。
Ø 其函數依賴包括:{學號, 課程號} → 名次,{課程號, 名次} → 學號。{學號, 課程號}和{課程號, 名次}是此關係的候選碼。其全部的屬性都是主屬性,此關係模式屬於第三範式。
l 第三範式是在第二範式的基礎上,增長了條件「每一個非主屬性都不傳遞函數依賴於任一候選碼」而獲得的。
【例2.10】假設有一個關於員工信息的關係模式:emp_info(Eno, Ename, Dept, Dleader)。其中,Eno爲員工編號,Ename爲員工姓名,Dept爲員工所在部門,Dleader爲部門領導。請說明該關係模式屬於第幾範式以及它存在的問題。
Ø 員工編號是惟一的,每一個員工只屬於一個部門,每一個部門只有一個領導(這裏假設領導不屬於員工範疇,且不考慮縱向領導關係)。員工編號(Eno)爲惟一的碼,由此容易推出:
Eno → Ename
Eno → Dept
Eno → Dleader
Ø 顯這些函數依賴都是徹底函數依賴。這些函數依賴說明了全部非主屬性都徹底函數依賴於碼Eno,因此關係模式emp_info屬於第二範式。但該關係模式還存在下列的函數依賴:
Eno→Dept
Dept→Dleader
Eno→Dleader
l 上述說明非主屬性Dleader傳遞函數依賴於碼Eno,即關係模式emp_info中存在傳遞函數依賴,它不屬於第三範式。傳遞函數依賴的存在一樣會致使必定程度的數據冗餘以及插入異常和刪除異常等問題。這體如今:
Ø 一個部門有多個員工,每個員工在關係emp_info中都造成一個元組。該元組除了包含員工編號和姓名外,還包含所在部門和部門領導的信息。後兩項信息會屢次重複出現,重複的次數與部門的員工數相等。這是數據冗餘的根源。
Ø 數據冗餘的存在致使數據維護成本增長。
Ø 當一個部門剛成立時,若是尚未招員工,那麼將沒法輸入部門和部門領導的信息(主碼Eno的輸入值不能爲null)。這就形成了插入異常。
Ø 出於某些緣由,部門的員工可能所有辭職,或者暫時所有轉到其餘部門去時,須要將全部的員工信息所有刪除,這時部門和部門領導的信息也將被刪除。這就致使了刪除異常。
l 爲消除傳遞函數依賴,可使用投影分解法將關係模式分解成相應的若干個模式
【例子】根據存在的傳遞鏈「Eno→Dept→Dleader」,能夠從節點「Dept」上將此傳遞鏈切開,造成如下兩個模式:
emp_info2(Eno, Ename, Dept)
dept_info2(Dept, Dleader)
關係模式emp_info2的碼爲Eno,dept_info2的碼爲Dept。
l 在消除傳遞函數依賴後獲得的兩個關係模式emp_info2和dept_info2都屬於第三範式,它們當中都不存在傳遞函數依賴。
【例子】能夠在沒有員工信息的前提下插入部門信息;能夠刪除全部的員工信息而不影響部門信息;數據冗餘度也有所下降了,從而也簡化了其餘的一些操做等。
l 屬於3NF的關係模式主要是消除了非主屬性對於候選的傳遞函數依賴和部分函數依賴,但並無考慮主屬性和候選碼之間的依賴關係。它們之間存在的一些依賴關係也會引發數據冗餘和操做異常等問題。人們提出了更高一級的範式——BC範式。
2.5.4 BC範式(BCNF)
定義2.11 設R(U)是一個關係模式且R(U) ∈1NF,若是對於R(U)中任意一個非平凡的函數依賴B→C,B必含有候選碼,則稱R(U)屬於BC範式,記爲R(U)∈BCNF。
l 若是要求B→C爲非平凡的且徹底的,則要求該函數依賴的決定因素爲候選碼便可。
l 在BC範式的定義中並無明確提出其中的關係要屬於3NF,可是該定義確實保證了「其非主屬性既不部分函數依賴於候選碼,也不傳遞函數依賴於候選碼」,於是BCNF爲3NF的一個子集,即BCNF⊆3NF。
對於BC範式中的每個關係R(U),它們具備下列的性質:
u R(U)中的每個非主屬性都徹底函數依賴於任何一個候選碼。假設存在一個非主屬性attr部分函數依賴於一個候選碼B0,即B0 →^p attr。由部分函數依賴的定義,必存在B0的一個真子集B0′,使得B0′→attr。因爲B0′→attr是一個非平凡函數依賴。根據BCNF的定義,B0′必包含某一個候選碼C0。因爲候選碼B0的真子集包含該候選碼C0,因此B0也包含C0且C0異於B0。這說明一個候選碼包含一個異於本身的另一個候選碼,這是不可能的。
u R(U)中的每個主屬性徹底函數依賴於任何一個不包含它的候選碼。假設存在一個主屬性attr並不是徹底函數依賴於某一個不包含它的候選碼B0。當選擇該候選碼B0爲主碼時,attr也不徹底函數依賴於主碼B0。這與主碼的定義相矛盾。
u R(U)中沒有屬性徹底函數依賴於非候選碼(包括主碼)的屬性集。假設存在一個異於任何一個候選碼的屬性集B0和某一個屬性attr,使得屬性attr徹底函數依賴於B0,即B0 attr。但因爲B0 →^f attr,因此顯然有B→attr。由BCNF的定義,B0必包含某一個候選碼C0。由於B0異於任何一個候選碼,因此B0≠C0,於是B0真包含C0,C0爲B0的一個真子集。因爲C0爲候選碼,因此C0→attr。這說明,存在B0的一個真子集C0,使得C0→attr。但這與B0 →^f attr相矛盾。
定理2.3 設R(U)是一個關係模式,且R(U)Î3NF,若是R(U)只有一個候選碼,則R(U)ÎBCNF。
證實:對於R(U)中任意一個非平凡函數依賴C→D,假設R(U)惟一的候選碼爲B,只要證實C包含B便可。
假設C不包含B,即B ⊄ C。因爲B爲候選碼,因此B →^f U,進而可知B→U。由於C和D都爲U的子集,因此由Armstrong公理,U→C,U→D,因而B→C,B→D;因爲C→D爲非平凡函數依賴,因此D ⊄C;因爲C是任意的,因此C B;加上條件假設B Ë C,因而:
D ⊄ C,B ⊄ C,C →/ B
B→C
C→D
B→D
D傳遞依賴於B,這與R∈3NF矛盾。證畢。
特別地,在一個屬於3NF的關係中,當僅有一個屬性可以惟一標識每一個元組時,則這個關係屬於BCNF,且該屬性爲惟一的候選碼(也只能以它爲主碼)。
【例2.11】觀察例2.10中分解後造成的關係模式:emp_info2(Eno, Ename, Dept)
u 該關係模式中既沒有部分函數依賴也沒有傳遞依賴,因此屬於3NF。且因爲僅有惟一的屬性Eno可以惟一標識每個元組,因此這個關係屬於BCNF。
u 定理2.3看起來很是簡單,但它很是有用。在許多狀況下,設計的關係每每都是有且僅有一個可以惟一標識每個元組的屬性,這時只要保證不存在對該屬性的部分函數依賴和傳遞函數依賴便可保證該關係屬於BCNF,而不用對BCNF的定義進行驗證,從而避免了複雜的驗證過程,提升設計效率。
u 定理2.3中的條件只是一個關係屬於BCNF的充分條件,但不是必要條件。也就是說,知足該定理條件的關係必屬於BCNF,但不知足該定理條件的關係也可能屬於BCNF,如例2.12。
【例2.12】 對於學生住宿關係模式StuDom(學號, 姓名系別, 宿舍)而言,假定「姓名」屬性也具備惟一性,那麼關係模式StuDom擁有兩個由單屬性組成的候選碼,分別是「學號」和「姓名」。因爲非主屬性,即「系別」和「宿舍」,不存在對任一候選碼的部分或傳遞函數依賴,因此關係模式StuDom屬於第三範式。同時關係模式StuDom中除「學號」和「姓名」外沒有其它決定因素,因此StuDom關係模式屬於BC範式。
u此例中,關係模式StuDom有兩個候選碼,分別是「學號」和「姓名」,而不是隻有一個候選碼(不知足定理2.3的條件),但它卻屬於BC範式。
u那麼有沒有屬於第三範式的關係模式卻不屬於BC範式的狀況呢?
【例2.13】對教學關係模式Teach(學生, 教師, 課程),若每一名教師只教授一門課,每門課可由多名任課教師教授,某一名學生選定某門課即對應一個固定的教師。獲得下述函數依賴集:
{學生, 課程}→教師
{學生, 教師}→課程
教師→課程
Ø {學生, 課程}和{學生, 教師}均是候選碼。由於沒有任何非主屬性對碼的傳遞函數依賴或部分函數依賴,故關係模式Teach屬於三範式。關係模式Teach不屬於BC範式,由於函數依賴「教師→課程」的決定因素——「教師」不含任一候選碼。
u 若是一個關係模型中的關係模式都屬於BCNF,則稱該關係模型知足BCNF,稱基於該關係模型的關係數據庫知足BCNF。
u 一個知足BCNF的關係數據庫已經極大地減小數據的冗餘,對全部關係模式實現了較爲完全的分解,消除了插入異常和刪除異常,已經達到了基於函數依賴爲測度的最高規範化程度。
Ø 關係模式的規範化實際上就是經過模式分解將一個較低範式的關係模式轉化爲多個較高範式的關係模式的過程。
從範式變化的角度看,關係模式的規範化是一個不斷增長約束條件的過程;
從關係模式變化的角度看,規範化是關係模式的一個逐步分解的過程。
Ø 關係模式的分解是關係模式規範化的本質問題,其目的是實現概念的單一化,即便得一個關係僅描述一個概念或概念間的一個種聯繫。經過分解能夠將一個關係模式分紅多個知足更高要求的關係模式,這些關係模式能夠在必定程度上解決或緩解數據冗餘、更新異常、插入異常、刪除異常等問題。
Ø 關係模式分解實際上又是一個關係模式的屬性投影和屬性重組的過程,又稱投影分解。投影和重組的基本指導思想是逐步消除數據依賴中不適合的成分,結果將產生多個屬於更高級別範式的關係模式。
u 投影分解的步驟就是低級範式到高級範式轉化的步驟,具體步驟是:
Ø 基於消除關係模式中非主屬性對候選碼的函數依賴的原則,對1NF關係模式進行合理的投影(屬性重組),結果將產生多個2NF關係模式。
Ø 基於消除關係模式中非主屬性對候選碼的傳遞函數依賴的原則,對2NF關係模式進行合理的投影,結果將產生多個3NF關係模式。
Ø 基於消除關係模式中主屬性對候選碼的傳遞函數依賴的原則,對3NF關係模式進行合理的投影,結果將產生多個BCNF關係模式。
• 鏈接無損分解
定義2.12 假設一個關係模式R(U)被分解成n個子關係模式:R1(U1),R2(U2),…, Rn(Un),其中U = R1(U1)∪R2(U2)∪…∪Rn(Un),並假設r, r1, r2,…, rn分別屬於關係模式R(U)及n個子關係模式的關係(二維表),若是這n個子關係的天然鏈接與原關係r相等,即r = r1 ⋈ r2 ⋈ … ⋈ rn,那麼這種分解稱爲(天然)鏈接無損分解,其中ri是r在Ui上的投影, i = 1,2,…n。
Ø 分解的基本思想之一是消除對候選碼的部分函數依賴和傳遞函數依賴。咱們能夠先在待分解的關係模式中找出這些部分函數依賴和傳遞函數依賴以及徹底函數依賴,而後「分解」部分函數依賴和傳遞函數依賴,使得這些函數依賴最終都變成徹底函數依賴,最後將這些徹底函數依賴所涉及的屬性分別投影成新的關係便可。
【例2.14】對於例2.6中的關係模式SSC(學號, 姓名, 系別, 導師工號, 導師姓名, 導師職稱, 課程名稱, 課程成績),請運用模式分解方法將其轉化爲若干個屬於BC範式的關係模式。
Ø 關係模式SSC中惟一的候選碼爲{學號, 課程名稱}。咱們先找出對候選碼的全部徹底函數依賴、部分函數依賴和傳遞函數依賴:
• {學號, 課程名稱} 課程成績
• {學號, 課程名稱} {姓名, 系別}
• {學號, 課程名稱} 導師工號
• 導師工號 {導師姓名, 導師職稱}
• {學號, 課程名稱} {導師姓名, 導師職稱}
u 如下找出部分函數依賴中的徹底函數依賴:
由「{學號, 課程名稱} {姓名, 系別}」獲得「學號 {姓名, 系別}」
由「{學號, 課程名稱} 導師工號 」獲得「學號 導師工號」
u 咱們根據以上全部的徹底函數依賴初步設定分解成的各關係模式(原則是「一個徹底函數依即爲一個關係模式」):
Ø T1(學號, 課程名稱, 課程成績)
Ø T2(導師工號, 導師姓名, 導師職稱)
Ø T3(學號, 姓名, 系別)
Ø T4(學號, 導師工號)
u 爲了減小數據冗餘和減小數據維護的複雜性,能夠將關係模式T4(學號, 導師工號)併到T3(學號, 姓名, 系別)中,從而造成新的關係模式——T3′(學號, 姓名, 系別, 導師工號)。這樣,就獲得以下的分解結果:
Ø T1(學號, 課程名稱, 課程成績)
Ø T2(導師工號, 導師姓名, 導師職稱)
Ø T3′(學號, 姓名, 系別, 導師工號)
u 由定理2.3稍加分析能夠知道,以上三個關係模式均屬於BC範式,並且上述的分解是鏈接無損分解。
定理2.4 假設S和T爲關係模式R分解後所獲得的兩個關係模式,則該分解爲鏈接無損分解的充分必要條件是:(S∩T) → (S-T)或(S∩T) → (T-S)
2. 保持函數依賴的分解
定義2.13 設R(U)是一個關係模式,F爲R(U)的一個函數依賴集,B,C爲R(U)所涉及的屬性集的子集。若是利用Armstrong公理系統中的推理規則可以從函數依賴集F中推出B→C,則稱F邏輯蘊涵B→C。F所邏輯蘊涵的函數依賴的集合稱爲F的閉包,記爲F+。
定義2.14 設一個關係模式R(U)被分解成n個關係模式:R1, R2,…, Rn,F爲R(U)的屬性間函數依賴的集合,F1, F2,…, Fn分別爲F在R1, R2,…, Rn上的投影。對於任意F所邏輯蘊涵的函數依賴B→C,總存在某一個Fi,使得Fi邏輯蘊涵B→C,則這種分解稱爲保持函數依賴的分解。
3. 既保持函數依賴又具備天然鏈接無損的分解
Ø 鏈接無損分解和保持函數依賴的分解是兩個相互獨立的模式分解。但它們的優缺點具備必定的互補性。
Ø 鏈接無損分解能夠保證分解所獲得的關係模式通過天然鏈接後又獲得原關係模式,不會形成信息的丟失。這種分解可能帶來數據冗餘、更新衝突等問題。
緣由:鏈接無損分解不是按照關係模式所蘊涵數據語義來進行分解。而保持函數依賴的分解則正好是按照數據語義來進行分解,它可使分解後的關係模式相互獨立。避免由鏈接無損分解帶來的問題,但它在某些狀況下可能形成信息丟失。一個天然的想法就是構造這樣的分解:該分解既是保持函數依賴的分解,又具備天然鏈接無損的特性。這種分解就稱爲既保持函數依賴又具備天然鏈接無損的分解。
【例2.15】 考慮例2.10中的關係模式:emp_info(Eno, Ename, Dept, Dleader)
Ø Eno爲員工編號,Ename爲員工姓名,Dept爲員工所在部門,Dleader爲部門領導。若是將該關係模式分解爲:emp_info1(Eno, Ename, Dept)和emp_info2(Eno, Dleader)。易驗證,這種分解雖然是鏈接無損分解,但會形成數據冗餘、更新異常等問題。進一步分析還能夠發現,該分解不保持函數依賴。例如,函數依賴Dept→Dleader既不被emp_info1的函數依賴集所邏輯蘊涵,也不爲emp_info2的函數依賴集所邏輯蘊涵。
Ø 如今咱們將關係模式emp_info(Eno, Ename, Dept, Dleader)分解成以下的兩個模式:
emp_info2(Eno, Ename, Dept)
dept_info2(Dept, Dleader)
Ø 能夠驗證,這種分解方法保持了函數依賴,同時又具備天然鏈接無損的特性,它是既保持函數依賴又具備天然鏈接無損的分解。