目錄
一、關系代數
基本運算
笛卡爾積(×)
投影(π)
選擇(σ)
自然連接(?)
真題示例:
二、函數依賴
基本概念
Armstrong公理系統
鍵與約束
三、范式(Normalization)
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
BC范式(BCNF)
真題示例:
一、關系代數
-
基本運算
- 并(∪):合并兩張表的所有記錄,重復記錄僅顯示一次。
- 示例:
S1 ∪ S2
?結果包含?S1
?和?S2
?的所有不重復記錄。
- 示例:
- 交(∩):返回兩張表中相同的記錄。
- 示例:
S1 ∩ S2
?結果為?Sno='No0001', Sname='Mary', Sdept='IS'
。
- 示例:
- 差(-):返回第一張表有而第二張表沒有的記錄。
- 示例:
S1 - S2
?結果為?Sno='No0003'
?和?No0004
?的記錄。
- 示例:
- 并(∪):合并兩張表的所有記錄,重復記錄僅顯示一次。
-
笛卡爾積(×)
- 結果包含兩表所有屬性列,記錄數為兩表記錄數的乘積。
- 示例:
S1 × S2
?的每條記錄是?S1
?和?S2
?記錄的排列組合。
-
投影(π)
- 選擇某表的特定列(可用列名或列序號表示)。
- 示例:
π(Sname)(S1)
?返回?S1
?的所有學生姓名。
-
選擇(σ)
- 按條件篩選表中的記錄。
- 示例:
σ(Sdept='IS')(S1)
?返回?Sdept
?為?IS
?的記錄。
-
自然連接(?)
- 合并兩表中屬性相同且值相同的記錄,相同屬性列僅顯示一次。
真題示例:
給定關系R(A, B, C, D)和關系S(C, D, E),對其進行自然連接運算R?S后的屬性列為( )個;與σR.B>S.E(R?S)等價的關系代數表達式為( )。
A. 4 B. 5 C. 6 D. 7
A. σ?>?(R×S) B. π?,?,?,?,?(σ'?' > '?' ∧?=?∧?=?(R×S))
C. σ'?' > '?'(R×S) D. π?,?,?,?,?(σ?>?∧?=?∧?=?(R×S))
1. 計算自然連接運算 R?S? 后的屬性列個數
自然連接是一種特殊的等值連接,它要求兩個關系中進行比較的分量必須是相同的屬性組,并且在結果中把重復的屬性列去掉。 關系 R(A,B,C,D)? 有 4? 個屬性,關系 S(C,D,E)? 有 3? 個屬性,其中 C? 和 D? 是公共屬性。 進行自然連接時,重復的公共屬性 C? 和 D? 只保留一次,所以 R?S? 后的屬性列為 A?、B?、C?、D?、E?,共 5? 個。?
2. 找出與 σR.B>S.E?(R?S)? 等價的關系代數表達式
?σR.B>S.E?(R?S)? 表示先對 R? 和 S? 進行自然連接,然后從連接結果中選擇滿足 R? 中的屬性 B? 大于 S? 中的屬性 E? 的元組。 在進行關系代數運算時,一般先將自然連接轉換為笛卡爾積和選擇、投影運算。
- 首先將 R?S? 轉換為笛卡爾積 R×S? 并添加等值連接條件,即 σR.C=S.C∧R.D=S.D?(R×S)? 。
- 然后要從結果中選擇滿足 R.B>S.E? 的元組,完整的選擇條件就是 σR.B>S.E∧R.C=S.C∧R.D=S.D?(R×S)? 。
- 用屬性的序號表示,R×S? 后的屬性順序為 R.A?(第 1? 列)、R.B?(第 2? 列)、R.C?(第 3? 列)、R.D?(第 4? 列)、S.C?(第 5? 列)、S.D?(第 6? 列)、S.E?(第 7? 列),那么選擇條件可寫為 σ2>7∧3=5∧4=6?(R×S)? 。
- 最后,由于最終結果不需要重復的 C? 和 D? 列(在自然連接中重復列已被去掉),所以需要對結果進行投影,保留 A?、B?、C?、D?、E? 對應的列,即 π1,2,3,4,7?(σ2>7∧3=5∧4=6?(R×S))? 。
二、函數依賴
-
基本概念
- 函數依賴:若屬性?
X
?能唯一確定?Y
,則稱?Y
?依賴于?X
(記作?X→Y
)。 - 部分函數依賴:若?
(A,B)→C
,但?A→C
?也成立,則?C
?部分依賴于?(A,B)
。 - 傳遞函數依賴:若?
A→B
、B→C
?且?A
?與?B
?不等價,則?A→C
?是傳遞依賴。
- 函數依賴:若屬性?
-
Armstrong公理系統
函數依賴的公理系統(Armstrong) 設關系模式R<U,F>,U是關系模式R的屬性全集,F是關系模式R的一個函數依賴集。對于R<U,F>來說有以下的:
-
自反律(Reflexivity)
- 若屬性集Y是屬性集X的子集(Y?X),則必然存在函數依賴X→Y。
- 示例:若X={A,B,C},Y={A,B},則X→Y自動成立。
-
增廣律(Augmentation)
- 若存在X→Y,則對任意屬性集Z,有XZ→YZ。
-
傳遞律(Transitivity)
- 若X→Y且Y→Z,則必然有X→Z。
-
合并規則(Union)
- 若X→Y且X→Z,則可合并為X→YZ。
-
偽傳遞規則(Pseudo-transitivity)
- 若X→Y且WY→Z,則XW→Z。
- 示例:若學號→姓名,(姓名,課程)→成績,則(學號,課程)→成績。
-
分解規則(Decomposition)
- 若X→Y且Z?Y,則X→Z。
- 示例:若A→{B,C},則A→B和A→C均成立。
-
-
鍵與約束
- 超鍵:能唯一標識此表的屬性的組合。
- 候選鍵:超鍵中去掉冗余的屬性,剩余的屬性就是候選鍵。
- 主鍵:任選一個候選鍵,即可作為主鍵。
- 外鍵:其他表中的主鍵。
- 主屬性:候選鍵內的屬性為主屬性,其他屬性為非主屬性。
- 實體完整性約束:即主鍵約束,主鍵值不能為空,也不能重復。
- 參照完整性約束:即外鍵約束,外鍵必須是其他表中已經存在的主鍵的值,或者為空。
- 用戶自定義完整性約束:自定義表達式約束,如設定年齡屬性的值必須在0到150之間。
三、范式(Normalization)
-
第一范式(1NF)
- 表中每個字段不可再分(無嵌套表)。
-
原始表(不符合1NF):
員工ID 員工姓名 薪資/月 001 張三 基本工資:5000, 補貼:1000 002 李四 基本工資:6000, 補貼:800 1NF規范化后:
員工ID 員工姓名 基本工資 補貼 001 張三 5000 1000 002 李四 6000 800
-
第二范式(2NF)
- 滿足1NF,且非主屬性完全依賴于候選鍵(消除部分依賴:每一個非主屬性不會依賴復合主鍵中的某一個列)。
-
原始表(不符合2NF):
學號 課程號 課程名稱 成績 教師 S001 C001 數學 90 王老師 S001 C002 英語 85 李老師 問題:課程名稱和教師僅依賴于課程號(部分依賴復合主鍵 (學號, 課程號))。
2NF規范化后:
選課表(完全依賴):學號 課程號 成績 S001 C001 90 S001 C002 85 課程表(消除部分依賴):
課程號 課程名稱 教師 C001 數學 王老師 C002 英語 李老師
-
第三范式(3NF)
- 滿足2NF,且非主屬性不傳遞依賴于候選鍵。
-
原始表(不符合3NF):
學號 姓名 系編號 系主任 S001 張三 D01 劉主任 S002 李四 D02 陳主任 問題:系主任傳遞依賴于學號(學號 → 系編號 → 系主任)。
3NF規范化后:
學生表:學號 姓名 系編號 S001 張三 D01 S002 李四 D02 系表(消除傳遞依賴):
系編號 系主任 D01 劉主任 D02 陳主任
-
BC范式(BCNF)
- 滿足3NF,且所有依賴的左側必須包含候選鍵。
- BC范式要求在滿足第三范式的條件下,進一步消除主屬性對于碼的部分函數依賴和傳遞依賴。簡單通俗地講,對于關系模式中的任意一個函數依賴X→Y(X是決定因素,Y是被決定因素),X必須是候選鍵或者包含候選鍵。也就是說,每一個函數依賴的左邊決定因素都必然包含候選鍵,只有滿足這樣的條件,關系模式才符合BCNF。
-
在給定的例子中有一個涉及S、T、J三個屬性的關系模式,通過分析其依賴關系和候選鍵來判斷是否符合BCNF:
-
- 候選鍵與依賴集:該關系模式的候選鍵有兩種情況,分別是組合鍵(S, T)和(S, J),依賴集為{SJ→T,T→J} 。由于S、T、J這三個屬性都能通過候選鍵組合確定,所以它們都是主屬性,因此該關系模式達到了3NF(因為不存在非主屬性,也就不存在非主屬性對碼的部分依賴和傳遞依賴)。
- BCNF判斷:當以(S, J)作為候選鍵時,看依賴T→J,其中T在(S, J)這種候選鍵情況下并不是候選鍵,即T→J這個函數依賴的決定因素T不包含任意候選碼,所以這個關系模式不符合BCNF的要求。
- 轉換為BCNF:為了使該關系模式滿足BCNF,將依賴T→J修改為TS→J 。這樣修改后,在新的依賴TS→J中,左邊的決定因素TS包含了候選鍵之一S,滿足了BCNF中每一個依賴的左邊決定因素都包含候選鍵的條件,此時該關系模式就達到了BCNF。
-
-
原始表(不符合BCNF):
學生ID 課程 教師 S001 數學 王老師 S002 英語 李老師 假設依賴:
教師 → 課程(每個教師只教一門課,但教師不是候選鍵)。
問題:存在非平凡依賴(教師 → 課程),左側不是候選鍵。BCNF規范化后:
學生-教師表(候選鍵為 (學生ID, 教師)):
學生ID 教師 S001 王老師 S002 李老師 教師-課程表(教師為候選鍵):
教師 課程 王老師 數學 李老師 英語
真題示例:
給定關系模式R(U,F),U={A,B,C,D},F={AB→C,CD→B}。關系R( ),且分別有( )。
A.只有1個候選關鍵字ACB B.只有1個候選關鍵字BCD
C.有2個候選關鍵字ACD和ABD D.有2個候選關鍵字ACB和BCD
A.0個非主屬性和4個主屬性 B.1個非主屬性和3個主屬性
C.2個非主屬性和2個主屬性 D.3個非主屬性和1個主屬性
候選關鍵字的求法
根據函數依賴集 F = {AB→C, CD→B},我們可以按照以下步驟求候選關鍵字:
-
找出從未在右邊出現過的屬性:
- 在 F 中,右邊出現的屬性是 C 和 B
- 因此,A 和 D 從未在右邊出現過,它們必然是候選鍵的一部分
-
以 A 和 D 為基礎,嘗試構建候選關鍵字:
- 嘗試 AD:
- AD? = AD
- 無法推導出 B 或 C(因為 AB→C 和 CD→B 都需要額外的屬性)
- 所以 AD 不是候選關鍵字
- 嘗試 ABD:
- ABD? = ABD → C (AB→C) → ABCD
- 可以推導出所有屬性,因此 ABD 是候選關鍵字
- 嘗試 ACD:
- ACD? = ACD → B (CD→B) → ABCD
- 可以推導出所有屬性,因此 ACD 是候選關鍵字
- 其他組合(如 AB、AC、AD、BC、BD、CD):這些組合的閉包都無法推導出所有屬性,因此不是候選關鍵字
- 嘗試 AD:
-
結論:
- 候選關鍵字有 2 個:ABD 和 ACD
主屬性和非主屬性
-
主屬性:出現在任何候選關鍵字中的屬性
- ABD 包含 A、B、D
- ACD 包含 A、C、D
- 因此主屬性是 A、B、C、D(所有屬性都是主屬性)
-
非主屬性:不包含在任何候選關鍵字中的屬性
- 由于所有屬性都是主屬性,非主屬性數量為 0
設有關系模式R(E,N,M,L,Q),其函數依賴集為F={E→N,EM→Q,M→L}。則關系模式R達到了______;該關系模式_________。
A. 1NF B. 2NF C. 3NF D. BCNF
A. 無需進行分解,因為已經達到了3NF
B. 無需進行分解,因為已經達到了BCNF
C. 盡管不存在部分函數依賴,但還存在傳遞依賴,所以需要進行分解
D. 需要進行分解,因為存在冗余、修改操作的不一致性、插入和刪除異常
第一步:識別所有屬性
屬性集 U = {E, N, M, L, Q}
第二步:分析函數依賴集 F
F = {?E → N,?EM → Q,?M → L?}
第三步:找出從未出現在右邊的屬性(候選鍵的必須屬性)
-
在 F 中,右邊出現的屬性:N, Q, L
-
從未出現在右邊的屬性:E, M
-
因此,E 和 M 必須包含在候選鍵中
第四步:以 E 和 M 為基礎構建候選鍵
-
嘗試 EM:
-
計算 EM?:
-
初始:EM
-
應用 E→N:EMN
-
應用 EM→Q:EMNQ
-
應用 M→L:EMNQL
-
-
EM? = EMNQL = U(覆蓋所有屬性)
-
因此,EM 是候選鍵
-
范式分析(基于候選鍵 EM)
1. 主屬性和非主屬性
-
主屬性:E, M(出現在候選鍵中)
-
非主屬性:N, L, Q
2. 檢查 2NF(消除部分函數依賴)
-
檢查非主屬性對候選鍵的部分依賴:
-
E→N:N 依賴于候選鍵的一部分(E),屬于部分函數依賴 → 違反 2NF
-
M→L:L 依賴于候選鍵的一部分(M),屬于部分函數依賴 → 違反 2NF
-
EM→Q:Q 完全依賴于整個候選鍵 → 符合 2NF
-
-
結論:不滿足 2NF
是否需要分解
-
存在部分函數依賴和傳遞依賴,會導致:
-
數據冗余(如 E→N 導致 N 重復存儲)
-
更新異常(修改 E 對應的 N 需要修改多條記錄)
-
插入異常(無法單獨插入 M→L 的信息)
-
刪除異常(刪除 EM 會丟失 M→L 的信息)
-
-
需要進行分解,因為存在冗余、修改操作的不一致性、插入和刪除異常
分解方法
-
將部分依賴單獨分解:
-
R1(E, N):滿足 E→N
-
R2(M, L):滿足 M→L
-
R3(E, M, Q):滿足 EM→Q
-
每個關系模式都滿足 BCNF
-