數據庫理論基本概念
三級模式和兩級映像
外模式 > 用戶和數據庫系統的接口
-------- 外模式-概念模式映射
概念模式 > 數據的邏輯結構和特征的描述
-------- 概念模式-內模式映射
內模式 > 數據物理結構和存儲方式的描述三級模式分別對應:視圖、基本表、存儲文件
兩級映像保證了數據的獨立性
術語
關系: 一個關系就是一張表,每個關系有個關系名。
元組: 存儲文件中的一行記錄
屬性: 表中的列頭(列名、字段)稱為屬性,屬性值相當于記錄中的數據項或字段值。
域: 屬性的取值范圍
關系模式格式: 關系名(屬性名1, 屬性名2,…)
例:S(id, name, age, sex) 學生S關系模式,屬性為學號、姓名、年齡、性別
候選碼:能夠唯一標識表中記錄的最小屬性集,一個表可以有多個候選碼。
主碼: 將最穩定的候選碼作為主碼
例如,考慮一個名為
Employees
的表,其中包含EmployeeID
、SSN
(社會保險號)和Name
等屬性。如果每個員工都有一個唯一的EmployeeID
和一個唯一的SSN
,那么EmployeeID
和SSN
都可以作為候選碼。但出于實際考慮(如隱私和穩定性),通常會選擇EmployeeID
作為主碼。
主/非主屬性: 包含在候選碼中的屬性成為主屬性,反之稱為非主屬性。
外碼(外鍵): 外鍵是一個字段(或字段組合),其值必須在另一個表的主鍵(或具有唯一約束的字段)中存在。
當兩個表之間存在多對多關系時,通常會引入一個關系表(或稱為橋接表、關聯表、映射表等)來存儲這兩個表之間的關系。這個關系表通常會包含兩個外鍵列,分別引用兩個原始表的主鍵列,并且可能還會有一個自己的主鍵列(盡管在某些數據庫系統中,這兩個外鍵的組合也可以作為復合主鍵)。
全碼(了解): 若關系R(H,L,M,P)的主鍵為全碼,則關系R的主鍵為HLMP。
完整性約束
實體完整性約束:
- 主鍵約束:候選碼的值不能為空(包括主碼/主鍵)
參照/引用完整性約束:
- 外鍵約束:確保一個表中的數據匹配另一個表中的數據。外鍵是一個字段或字段組合,其值引用了另一個表的主鍵。外鍵字段可以有空值,除非設置了級聯更新或刪除規則。
域完整性約束:
- 數據類型約束:確保字段中的數據是預期的數據類型。
- 檢查約束(Check Constraint):限制字段中的值范圍或格式。例如,可以確保年齡字段中的值在0到150之間。
- 默認約束(Default Constraint):當沒有為字段指定值時,提供默認值。
- 非空約束(Not Null Constraint):確保字段必須有一個值。
用戶自定義完整性約束:
-
觸發器(Triggers):基于某個事件(如INSERT、UPDATE或DELETE操作)自動執行或激活的SQL語句或存儲過程。觸發器可以用于實現復雜的業務規則和數據完整性檢查。
-
存儲過程和函數(Stored Procedures and Functions):封裝的SQL代碼塊,可以在數據庫中執行復雜的邏輯和計算。它們可以用于確保數據滿足特定的業務規則或條件。
-
規則和斷言(Rules and Assertions):在某些數據庫系統中(如SQL Server中的規則或PostgreSQL中的斷言),它們可以定義數據的驗證邏輯。然而,并非所有數據庫系統都支持這些特性。
-
唯一性約束(Unique Constraint):確保字段或字段組合在表中的值是唯一的,但允許有空值。
-
索引約束:雖然索引主要用于提高查詢性能,但它們也可以用于確保數據的唯一性(通過創建唯一索引)。
-
序列(Sequences):在某些數據庫系統中,序列用于生成唯一的數字,通常用于自動填充主鍵字段。
關系代數
關系的并: 關系R與關系S的所有元組的合并,再刪去重復元組,記為 R ∪ S
。
關系的交: 同時屬于關系R與關系S的元組集合,記為R ∩ S
關系的差: 關系R與關系S的差為從關系R中刪去與關系S中相同的元組,記為 R - S
。
笛卡爾積: 兩個集合R和T,它們的笛卡爾積表示為R × T
,是一個新的集合,其中的每個元素都是R中的一個元素和T中的一個元素組成的有序對。
投影: 從垂直方向進行運算,在關系R中選出若干屬性列組成新的關系。記作:π
選擇: 從水平方向進行運算,選擇滿足指定條件的元組,記作:δ
上例中 π A , C ( R ) π_{A,C}(R) πA,C?(R) 同理 π 1 , 3 ( R ) π_{1,3}(R) π1,3?(R) , δ B = ′ 5 ′ ( S ) δ_{B='5'}(S) δB=′5′?(S) 同理 δ 1 = ′ 5 ′ ( S ) δ_{1='5'}(S) δ1=′5′?(S) 可以用列序號
θ連接: 按條件進行連接
自然連接: 基于兩個關系中共同存在的屬性(通常稱為主鍵和外鍵)來組合這兩個關系
外連接:
關系模式
關系模式定義為:R<U,F>
- U為R的屬性
- F為屬性組U上的依賴
例1:最終目的就是通過候選關鍵字組合可以表示關系中的所有屬性
- 因為A不依賴任何屬性,所以候選關鍵字肯定包括A
- 選擇A、B可以把C表示出來(AB→C),故AB是一組候選關鍵字
- 選擇A、C可以把B表示出來(C→B),故AC是一組候選關鍵字
- 在候選關鍵字中的屬性都為主屬性
例2:
- A可推出B、C, C可推出D
- A、E可推出H
例3:
- 52空四個選項的閉包都可以推出A1 A2 A3 A4,但是主鍵應滿足其屬性的任意真子集不能表示全集(U)。
- A1→A4是冗余的因為,A1→A2、A2→A4,從而A1和A4存在傳遞依賴,即A1和A4的關系可以通過其它關系推導出來。
- 注意:如果刪除A2→A4,雖說A1的閉包依舊可以推出所有屬性,但依舊無法推出A2→A4的依賴關系。
例4: