一、關系數據庫系統概述
數據:是對事物描述的符號記錄,它描述事物中人們所感興趣的特征,它能被計算機識別、存儲和處理
數據管理:是對數據的分類、組織、編碼、存儲、查詢和維護等活動,是數據處理的中心環節
數據管理的目標:
- 減少數據的冗余度(數據的重復存儲)
- 提高數據的共享性(用戶/語言/現在未來)
- 提高數據的獨立性(應用程序獨立於數據結構變化)
數據管理的三個階段:人工 -> 文件 -> 數據庫(60年代末)
數據庫技術:數據管理的最新技術,研究數據庫的結構、存儲、管理和使用
DBS的組成:
- 數據庫:以一定的組織形式(數據模型)存放在計算機存儲設備上的相關數據的集合
- 數據庫管理系統:管理數據庫的軟件
- 提供多種高級用戶接口
- 查詢處理和優化
- 數據的安全性控制
- 數據的完整性控制
- 並發控制
- 數據庫恢復
- 數據目錄(數據字典)管理
- 用戶或應用程序
- 基於數據庫的應用程序及用戶
- 使用簡單的終端命令會查詢語言對數據庫進行存取操作,即以查詢性應用為主的用戶
- 數據庫管理員(DBA):進行數據庫的規划、設計、協調、維護和管理的人員或集體
數據庫系統的生存周期
- 數據庫系統的規划
- 數據庫設計
- 數據庫的建立
- 數據庫的運行、管理和維護
- 數據庫的擴充和重構
開發數據庫系統的有關人員
- 數據庫管理員:進行數據庫的規划、設計、協調、維護和管理
- 系統分析員:負責應用系統的需求分析和規范說明,與DBA和用戶一起確定DBS的硬件平台和軟件設置,參與DBS設計
- 程序設計員:負責設計和編制應用系統程序模塊,並進行調試和安裝
- 用戶:參與可行性研究與需求分析
關系數據模型與關系模式
數據模型 -> 用來描述數據的一組概念和定義
三級數據模型
- 概念數據模型:面向客觀世界,與DBMS無關(E-R)
- 邏輯數據模型:關系數據模型(面向用戶和DBMS)
- 物理數據模型:與DBMS、OS和硬件有關
邏輯數據模型的三要素:
- 數據結構 -> 規定如何把基本的數據項組織成較大的數據單位
- 數據操作 -> 查詢、更新(增、刪、改);定義操作的含義、操作規則和實現操作的語言
- 數據約束 -> 是一組完整性規則的集合,定義了給定數據模型中數據及其聯系所具有的制約和依賴規則
數據模式 -> 用數據模型對具體數據的描述
關系數據模型
- 關系數據庫由關系組成(用二維表表示)
- 關系由元組組成(二維表的行),元組無序
- 元組由屬性組成(二維表的列),屬性無序
- 屬性的取值范圍 -- >屬性域(原子數據的有限集)
- 數據間的關系用鍵(候選/主/主屬性/外)隱含表示
關系中屬性的個數 --> 關系的目
關系中元組的個數 --> 關系的基數
關系名+屬性名 --> 關系模式
候選鍵:其屬性或屬性組的值能唯一決定其它所有屬性的值,而它的任何真子集無此性質
- 主屬性 ------- 包含在任何一個候選鍵中的屬性
- 非主屬性 ----- 不包含在任何一個候選集中的屬性
主鍵(Primary Key(PK)):當一個關系能有多個候選鍵時,可選定一個來標識元組
外鍵(Foreign Key(FK)):(不是本關系的鍵)卻引用了其它關系或本關系的鍵的屬性或屬性組
關系數據模型中表內不同元組間的聯系用外鍵隱含地表示
關系數據模型中表間(實體間)的聯系是用外鍵隱含地表示的
二、約束(四類)
- 域完整性 --> 屬性域中的值/由語義決定可否為NULL
- 實體完整性 --> 每個關系都有一個主鍵、值唯一、≠NULL
- 引用完整性約束 --> 外鍵引用已有的主鍵值,或為NULL(非主屬性作為主鍵)
- 一般化完整性約束 --> 由用戶定義的、和數據的具體內容有關的約束
前三個稱為隱含約束
后一個為顯示約束(可用觸發器、斷言、過程)
屬性為原子的 --> 固有約束
數據庫中完整性約束檢查,由DBMS實現或由用戶負責
操作
查詢是更新的基礎
操作的對象及運算結果都是關系
關系代數完備集(σ,Π,∪, —, × )
σ:在關系中選出符號條件的元組(行)----> 水平分割(where)
Π:選取關系中感興趣的列,可重排列順序 -----> 對關系垂直分割(select)
×: 如:R x S :目為 r+s,基數為 基數R x 基數S
⋈:只保留一個關系中的公共屬性
關系代數運算與SQL的QL的對應關系:
QL 的完整句法:
QL 的執行過程:
三、RDBMS 概述
1、層次結構:
- 應用層:應用程序與DBMS之間的接口,包括各種DB應用程序
- 語言翻譯處理層:對數據庫語言的各類語句進行語法分析、視圖轉換、授權檢查、完整性檢查、查詢優化等
- 數據存取層:將上層的集合操作轉換化為單元組操作,完成數據記錄的存取、存取路徑維護、並發控制、事務管理和數據庫恢復等任務,涉及到數據字典的讀與寫、日志文件的讀與寫、加/解鎖
- 數據存儲層:負責文件的邏輯打開、關閉、讀寫頁、讀寫緩沖等操作,並完成緩沖區管理、內外存交換和外存管理等任務
- 操作系統
- DB
2、DBMS的進程結構
- 一個應用進程對應一個DBMS核心進程
- 單進程多線程結構
- 系統只創建一個DBMS進程
- 在該進程中:有常駐的公共服務線程、用戶線程
- 各個線程能在邏輯上並行執行,共享DBMS的資源
3、DBMS與DBS的結構
- 分時系統環境下的集中式數據庫系統結構
- 網絡環境下的客戶/服務器結構(C/S)
- 物理上分布、邏輯上集中的分布式數據庫結構
- 三層結構(B/S結構): Browser ---> web 服務器 ---> 數據庫服務器
4、RDBMS功能的實現技術
一、必備的用戶接口 --> SQL/非過程化數據庫語言
- 交互式SQL:不能編程,訪問為主(DDL、QL、DML、DCL)
- 嵌入式SQL:將SQL嵌入其它程序設計語言中,可處理數據
二、數據目錄(數據字典或系統目錄)
有關數據庫中數據的定義和描述信息是 ---> 元數據
元數據組成的若干表 --> 數據目錄
數據目錄的內容:
- 基表、視圖的定義
- 存取路徑(索引、散列)
- 用於查詢優化的統計數據
- 數據目錄的定義和描述等
數據目錄作用、定義方法、使用范圍:
- 數據目錄對DBMS的運行必不可少,DBMS頻繁訪問
- 數據目錄本身不能用SQL語句定義,由系統在初始化生成,由DBMS維護
- DBMS一般不允許用戶對之更新,只允許受控查詢
- 數據目錄中的基表的定義被刪除,表中數據不能用
- 數據目錄未定義,任何SQL語句都無法執行
三、查詢處理與優化
- 數據庫的存儲結構
- 數據庫的存儲介質:多級
- 記錄的存儲結構
- 文件結構與存取路徑:堆、散列、索引:動態(B+樹)、靜態(主索引,次索引)
- 查詢優化的途徑(可綜合運用)
- 代數優化:改變基本操作的次序
- 依賴於存取路徑的優化:結合存取路徑(順序掃描、索引、簇集)的分析考慮各操作的執行策略及選擇原則
- 規則優化:僅根據啟發式規則,選擇執行的策略(先做選擇、投影,后做連接操作等)
- 代價估算優化
四、並發控制
1)事務的概念
-
DBMS的最小執行單位,含有若干有序的操作
-
遵守ACID准則:原子性、一致性、隔離性、持久性
-
結束的方式:提交成功/失敗 或 人為的故障
-
事務的定義和划分:(a)沒有顯式定義,則由DBMS按缺省規定自動划分事務
(b)用SQL語句顯式控制一個事務的開始和終止
- 並發的概念
並發是不同用戶(事務)同時訪問同一數據的事件,是不同事務在時間上的交叉執行
3)事務並發執行可能帶來的問題
不加控制 --> 三種沖突 -- > 三個問題 -- > 數據不一致
4)事務管理的任務 --> 保證事務的正常執行
- 滿足ACID准則
- 在系統故障時應滿足 --> 數據庫恢復
- 在單事務執行時滿足
- 在多事務並發執行時滿足 -- > 並發控制
5)並發控制的正確性准則
-
調度的沖突可串行化(目前DBMS普遍采用)
-
采用鎖機制:事務在操作前先對數據對象加鎖
加鎖時必須遵守的規則 -- > 加鎖協議(相容矩陣)
幾種有代表性的加鎖協議:S鎖(共享鎖)、X鎖(排它鎖)、U鎖(更新鎖)
S鎖:多個事務可封鎖一個共享頁;任何事務都不能修改該頁; 通常是該頁被讀取完畢,S鎖立即被釋放
X鎖:僅允許一個事務封鎖此頁;其他任何事務必須等到X鎖被釋放才能對該頁進行訪問;X鎖一直到事務結束才能被釋放
U鎖:用來預定要對此頁施加X鎖,它允許其他事務讀,但不允許再施加U鎖或X鎖;當被讀取的頁將要被更新時,則升級為X鎖;U鎖一直到事務結束時才能被釋放
五、數據庫恢復
-
故障的概念
起因:DBS 硬件、軟件故障
現象:出現差錯
后果:導致系統失效、數據丟失
DBS 的措施:增強系統可靠性
檢查差錯,將數據庫恢復到某個一致狀態
-
3種恢復技術
- 僅使用后備副本(脫機、增量轉儲、恢復用最近后備副本)
- 使用后備副本和日志文件(運行記錄)
- 利用多個副本
六、E-R數據模型與E-R圖(概念設計)
用E-R數據模型對現實世界抽象的結果用E-R圖表示
三個抽象概念:實體、屬性、聯系
實體(矩形框):客觀存在的且可以相互區分的事物
實體集:具有相同性質的實體的集合
聯系(菱形框):實體集之間的相互關系(抽象表示)
聯系的元數:與一個聯系有關的實體集的個數
聯系的類型:1:1、1:n、m:n
屬性(橢圓):實體或聯系所具有的特征
實體鍵(下畫線):能夠唯一標識實體集中某一實體的屬性或屬性組
七、邏輯設計
任務:
- 將概念結構轉換為某個具體的DBMS所支持的邏輯結構
- 形成合理的全局邏輯結構(基表),並設計出外模式(視圖)
- 對邏輯結構進行適當的調整和優化,使之在功能、完整性約束、可擴充性上滿足用戶需求
主要步驟:
概念設計結果 -- > 初始關系模式(E-R圖轉換成關系模式)
-
實體集
實體集 -- > 關系模式
實體屬性 -- > 關系模式的屬性 -- > 修改RDBMS不支持的類型
實體鍵 -- > 關系模式的鍵
-
聯系
m : n 的聯系集 -- > 用聯系集的屬性和兩個實體集的鍵單獨構成一個關系、新關系的鍵由兩個實體集的鍵組合 而成、每個實體鍵是一個外鍵
1 :n 的聯系集 -- > 聯系集的屬性歸入 n 方關系模式中,並引用 1 方關系中的鍵,形成外鍵
1 : 1 的聯系集 -- > 聯系集的屬性歸入兩個關系模式的任一個之中,並引入另一個關系的鍵,形成外鍵
多元聯系集 -- > 聯系集的屬性與各關系模式的鍵構成新關系
-
將具有相同實體鍵的關系模式合並為一個關系模式
實例:
基於 E-R 圖做邏輯設計,寫出關系模式(單下划線表示主鍵,波浪線表示外鍵(此處用斜體表示 ,別問,問就是不知道咋表示波浪線))
兩個實體對應兩個模式,M : N聯系對應一個模式
讀者(借書證號,姓名,單位,職稱)
圖書(圖書編號,分類號,書名,作者,出版單位,單價)
借閱(借書證號,圖書編號,借閱日期)
八、函數依賴和關系模式的規范化
函數依賴
-
屬性之間的約束關系 --> 數據依賴 --> 函數依賴
--> 多值依賴
-- > 連接依賴
-
函數依賴 -- > 一個或一組屬性的值可以決定其它屬性的值,是最基本的數據依賴
-
函數依賴的形式化定義 (X -> Y,表示 Y 函數依賴於 X)
-
函數依賴成立的條件
關系的任一可能指都滿足(不僅是當前值)
-
平凡函數依賴與非平凡函數依賴
一個函數依賴 X -> Y 如果滿足 Y ⊈ X,則為非平凡函數依賴,否則稱之為平凡函數依賴
-
完全函數依賴與部分函數依賴
若 Y 函數依賴於 X,但不依賴於 X 的任何子句 X',則稱 Y 完全函數依賴於 X,否則稱 Y 部分函數依賴於 X
-
傳遞函數依賴
若關系的三個屬性子集 X、Y、Z 之間有:
\[X -> Y,Y⇏X,Y->Z \]則稱 Z 傳遞函數依賴於 X
-
邏輯蘊涵
對一個關系模式存在的多個函數依賴,可以通過推理,從一組已知的函數依賴導出另一組函數依賴,兩個函數依賴集之間的這種關系稱為邏輯蘊涵
-
閉包
所有被一個已知函數依賴集 F 邏輯蘊涵的那些函數依賴的集合為 F 的閉包
-
Armstrong 公理
- 自反律
- 擴展律
- 傳遞律
候選鍵
求屬性集閉包算法可用於推導候選鍵
定義:
在關系模式R(U,F)中,若 X ⊆ U,Y ⊆ X, 且滿足 X -> U, Y⇏U
則稱 X 為 R 的候選鍵
方法:
-
若屬性 A 僅出現在所有函數依賴的 右 部
則它一定不包含在任何候選鍵中
-
若屬性 A 僅出現在所有函數依賴的 左 部
則它一定包含在某個候選鍵中
-
若屬性 A 既出現在函數依賴的 右 部,又出現在 左 部,則它可能包含在候選鍵中
-
在上述基礎上求屬性集閉包
未出現函數依賴集中的屬性一定是主屬性
關系模式的規范化
-
規范化 -- 使關系模式滿足某種條件
-
范式NF(Normal Form) -- 關系模式滿足的條件
-
有多級范式,級別越高,條件越嚴格(共5級,1NF、2NF、3NF(BCNF) -- 模式設計、4NF、5NF -- 理論研究)
-
第一范式(1NF)
屬性都是原子的關系模式滿足第一范式
可記為 R ∈ 1NF(通常自動滿足)
-
第二范式(2NF)
如果關系模式 R ∈ 1NF,且它的任一非主屬性都完全函數依賴於任一候選鍵,則稱 R 滿足第二范式
記為 R ∈ 2NF
-
第三范式(3NF)
如果關系模式 R ∈ 2NF,且每一個非主屬性不傳遞依賴於任一鍵
-> 各非主屬性既不部分依賴也不傳遞依賴於鍵,記為 R ∈ 3NF
-
BCNF(Boyce-Codd范式)-- 改進的3NF
如果關系模式的所有非平凡函數依賴的決定子都含有鍵,記為 R ∈ BCNF
滿足 BCNF 的關系可避免更新異常和數據冗余
若 R ∈ BCNF,則 R ∈ 3NF
-
-
關系模式的分解
- 模式分解
- 分解目的:使關系達到某級范式
- 分解准則:無損、保持依賴