基本概念
數(shù)據(jù)庫系統(tǒng)的特點
數(shù)據(jù)庫(Database):有組織、冗余度小晨汹,可共享终议、數(shù)據(jù)獨立性高、易擴展的數(shù)據(jù)集合祥山。
????? 數(shù)據(jù)長期存儲
????? 數(shù)據(jù)由DBMS統(tǒng)一管理
????? 數(shù)據(jù)共享程度高
????? 數(shù)據(jù)獨立性高
????? 數(shù)據(jù)整體結(jié)構(gòu)化圃验,冗余小
DBMS的基本功能
1. 數(shù)據(jù)庫定義:定義外模式、 模式缝呕、 內(nèi)模式澳窑、 數(shù)據(jù)庫完整性、 安全保密供常、 存取路徑等
2. 數(shù)據(jù)存忍:提供數(shù)據(jù)的操縱語言以便對數(shù)據(jù)進行查找和增刪改
3. 數(shù)據(jù)庫運行管理:事務(wù)管理、 自動恢復(fù)话侧、 并發(fā)控制栗精、 死鎖檢測或防止、 安全性檢查瞻鹏、 存取控制悲立、 完整性檢查、 日志記錄等
4. 數(shù)據(jù)組織新博、 存儲和管理:數(shù)據(jù)字典薪夕、 用戶數(shù)據(jù)、 存取路徑的組織存儲和管理赫悄, 以便提高存儲空間利用率原献, 并方便存取
5. 數(shù)據(jù)庫的建立和維護:數(shù)據(jù)轉(zhuǎn)換馏慨、 數(shù)據(jù)庫初建、 轉(zhuǎn)儲姑隅、 恢復(fù)写隶、 重組、 重構(gòu)以及性能檢測等
6. 網(wǎng)絡(luò)通信讲仰、 數(shù)據(jù)轉(zhuǎn)換等
DBMS的體系結(jié)構(gòu)
? 事務(wù)管理器
????– 將關(guān)于事務(wù)動作的消息傳給日志管理器
????– 將關(guān)于何時可以或必須將緩沖區(qū)拷回磁盤的消息傳給緩沖區(qū)管理器
????– 將數(shù)據(jù)庫查詢等操作消息傳給查詢處理器
? 恢復(fù)管理器
????– 當系統(tǒng)崩潰時慕趴, 恢復(fù)管理器被激活
????– 它檢查日志并在必要時利用日志恢復(fù)數(shù)據(jù)
? 日志管理器
????– 維護日志, 記錄所有對數(shù)據(jù)庫的修改操作
????– 必須與緩沖區(qū)管理器打交道鄙陡, 因為對磁盤的訪問是通過緩沖區(qū)管理器來進行的
? 緩沖區(qū)管理器
????– 分配冕房、 管理和回收緩沖區(qū)
????– 決定何時將緩沖區(qū)的數(shù)據(jù)寫回磁盤( 立即修改/延遲修改)
數(shù)據(jù)庫系統(tǒng)結(jié)構(gòu)
數(shù)據(jù)庫的三級模式結(jié)構(gòu)
外模式(所有用戶的公共數(shù)據(jù)視圖)、模式(數(shù)據(jù)庫用戶的數(shù)據(jù)視圖趁矾,是與某一應(yīng)用有關(guān)的數(shù)據(jù)的邏輯表示)耙册、內(nèi)模式(數(shù)據(jù)物理存儲和存儲方式的描述)
通過三級模式結(jié)構(gòu)實現(xiàn)了數(shù)據(jù)獨立性
關(guān)系模型
關(guān)系模型的組成要素及其優(yōu)缺點
組成要素
數(shù)據(jù)結(jié)構(gòu):關(guān)系(二維表)
數(shù)據(jù)操作:查詢 / 增 / 刪 / 改
完整性約束條件:實體 / 參照 / 用戶自定義
優(yōu)點
關(guān)系模型是建立在嚴格的數(shù)學(xué)概念的基礎(chǔ)上的。無論實體還是實體之間的聯(lián)系都用關(guān)系來表示毫捣。對數(shù)據(jù)的查詢結(jié)果也是關(guān)系(表)详拙,因此概念單一,其數(shù)據(jù)結(jié)構(gòu)簡單蔓同、清晰溪厘。
關(guān)系模型的存取路徑對用戶透明,從而具有更高的數(shù)據(jù)獨立性牌柄,更好的安全保密性,也簡化了程序員的工作和數(shù)據(jù)庫開發(fā)建立的工作侧甫。
缺點
由于存取路徑對用戶透明珊佣,查詢效率往往不如非關(guān)系數(shù)據(jù)模型。因此為了提高性能披粟,必須對用戶的查詢請求進行優(yōu)化咒锻,增加了開發(fā)數(shù)據(jù)庫管理系統(tǒng)的負擔。
關(guān)系模型的完整性約束條件及違約處理策略
實體完整性守屉、參照完整性惑艇、用戶自定義完整性
違約處理
1. 實體完整性檢查和違約處理
? ? 插入元組或修改主碼列操作時, DBMS自動檢查和處理:
????????? 主碼值是否唯一拇泛, 如果不唯一則拒絕操作
????????? 主碼各屬性是否為空滨巴, 只要有一個為空就拒絕操作
2.?可能破壞參照完整性的情況及違約處理
3. 用戶定義的約束條件檢查和違約處理
????– 插入元組或修改屬性的值時, DBMS檢查屬性上的
????????約束條件是否被滿足
????– 如果不滿足則操作被拒絕執(zhí)行
關(guān)系操作
關(guān)系代數(shù)
特點
????– 運算對象和運算結(jié)果均關(guān)系
????– 關(guān)系代數(shù)運算符包含集合運算符和專門的關(guān)系運算符
????– 傳統(tǒng)的集合運算是從關(guān)系的行的角度進行俺叭,專門的關(guān)系運算不僅涉及行而且涉及列
專門的關(guān)系運算:選擇恭取、投影、連接(等值連接熄守、自然連接蜈垮、外連接)耗跛、除運算
SQL語句
關(guān)系數(shù)據(jù)理論
如何評判數(shù)據(jù)庫設(shè)計的好壞?(數(shù)據(jù)冗余攒发、 操作異常)
數(shù)據(jù)冗余调塌、 插入異常、 刪除異常惠猿、 更新異常
1NF羔砾、 2NF、 3NF(定義紊扬、 判斷)
數(shù)據(jù)依賴的公理系統(tǒng)(Armstrong公理蜒茄、 最小函數(shù)依賴集 )
最小函數(shù)依賴集是指沒有任何冗余的函數(shù)依賴集
性質(zhì): 函數(shù)依賴集F的最小函數(shù)依賴集不一定唯一, 它與求解的次序有關(guān)
定理: 每一個函數(shù)依賴集F均等價于一個最小依賴集F'
數(shù)據(jù)庫設(shè)計
數(shù)據(jù)庫設(shè)計的步驟及各階段完成的任務(wù)
各階段的具體任務(wù)
? 需求分析階段 : 準確、 全面和深入地了解和分析用戶需求, 包括數(shù)據(jù)需求和處理需求牛曹。
? 概念結(jié)構(gòu)設(shè)計階段 : 通過對用戶需求進行綜合遣妥、歸納和抽象, 形成一個獨立于具體數(shù)據(jù)庫管理系統(tǒng)的概念模型凛篙。
? 邏輯結(jié)構(gòu)設(shè)計階段 : 將概念結(jié)構(gòu)轉(zhuǎn)換為某個數(shù)據(jù)庫管理系統(tǒng)所支持的數(shù)據(jù)模型, 并對其進行優(yōu)化。
? 數(shù)據(jù)庫物理設(shè)計階段 : 為邏輯數(shù)據(jù)模型選取一個最適合應(yīng)用環(huán)境的物理結(jié)構(gòu)润讥。
? 數(shù)據(jù)庫實施階段: 運用數(shù)據(jù)庫管理系統(tǒng)提供的數(shù)據(jù)語言及其宿主語言, 根據(jù)邏輯設(shè)計和物理設(shè)計的結(jié)果建立數(shù)據(jù)庫盘寡, 編制和調(diào)試應(yīng)用程序楚殿, 組織數(shù)據(jù)入庫, 并進行試運行竿痰。
? 數(shù)據(jù)庫運行和維護階段 : 數(shù)據(jù)庫系統(tǒng)在運行過程中必須不斷地對其進行評價脆粥、 調(diào)整和修改。
E-R圖設(shè)計及其到關(guān)系模式的轉(zhuǎn)換
????– 實體——矩形
????– 屬性——橢圓形
????– 聯(lián)系——菱形
????– 關(guān)鍵字—下劃線
E-R 模型向關(guān)系模型的轉(zhuǎn)換規(guī)則
????? 一個實體型轉(zhuǎn)換為—個關(guān)系模式
????? 一個1:1聯(lián)系可以轉(zhuǎn)換為一個獨立的關(guān)系模式影涉,也可以與任意對應(yīng)的關(guān)系模式合并
????? 一個1:n聯(lián)系可以轉(zhuǎn)換為一個獨立的關(guān)系模式变隔,也可以與n端對應(yīng)的關(guān)系模式合并
????? 一個m:n聯(lián)系轉(zhuǎn)換為一個關(guān)系模式
????? 三個或三個以上實體間的一個多元聯(lián)系可以轉(zhuǎn)換為一個關(guān)系模式
????? 具有相同碼的關(guān)系模式可以合并
存儲與索引
計算機系統(tǒng)的存儲體系及工作原理
查詢處理與優(yōu)化
關(guān)系查詢處理的步驟
事務(wù)及其ACID特性
事務(wù)( Transaction)
????– 用戶定義的一個對數(shù)據(jù)庫讀寫操作序列
????– 是數(shù)據(jù)庫中不可分割的執(zhí)行單位
????– 是數(shù)據(jù)庫恢復(fù)和并發(fā)控制的基本單位
????– 數(shù)據(jù)庫系統(tǒng)中通常有多個事務(wù)并行運行
ACID特性
? 原子性(Atomicity)
????– 事務(wù)中的操作要么都做, 要么都不做 (All or None)
? 一致性(Consistency)
????– 事務(wù)執(zhí)行的結(jié)果必須使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)
????– 與原子性密切相關(guān)
? 隔離性(Isolation)
????– 并發(fā)執(zhí)行的各事務(wù)不能相互干擾
? 持久性(Durability)
????– 事務(wù)一旦提交蟹倾, 它對數(shù)據(jù)庫的更新不再受后繼操作或故障的影響
★ DBMS中事務(wù)處理必須保證其ACID特性匣缘, 這樣才能保證數(shù)據(jù)庫中數(shù)據(jù)的安全和正確
★ 保證事務(wù)正確執(zhí)行是事務(wù)管理器的工作
數(shù)據(jù)庫恢復(fù)
故障種類及其可能對數(shù)據(jù)庫造成的影響
故障種類
? 事務(wù)故障
????– 錯誤輸入、 運算溢出等導(dǎo)致事務(wù)中斷
????– 這些錯誤有些是不可檢測(如電話號碼輸錯了1位)鲜棠, 有些是可以檢測(如電話號碼輸漏了1位)
????– 通過用戶定義約束肌厨、 DBMS檢查約束并啟動觸發(fā)器的方法可以捕捉并處理那些可被檢測的錯誤
? 介質(zhì)故障
????– 若只是局部的故障, 通常能通過磁盤扇區(qū)的奇偶校驗檢測到
????– 若磁頭損壞豁陆, 將使整個磁盤無法訪問夏哭, 常采用的解決方法是某種RAID模式、 備份献联、 冗余分布拷貝等
? 系統(tǒng)故障
????– 由于系統(tǒng)重啟竖配、 OS軟件故障何址、 DBMS代碼錯誤、 掉電等造成
????– 導(dǎo)致正在執(zhí)行的事務(wù)狀態(tài)丟失进胯, 原因是內(nèi)存的易失性
????– 解決方法是在分離的用爪、 非易失性的日志中記錄所有數(shù)據(jù)庫更新, 必要時進行恢復(fù)
可能對數(shù)據(jù)庫造成的影響
? 數(shù)據(jù)庫本身被破壞胁镐, 使數(shù)據(jù)庫中全部或部分數(shù)據(jù)丟失
????– 如系統(tǒng)故障偎血、 介質(zhì)故障等
? 數(shù)據(jù)庫沒有被破壞, 但因事務(wù)的運行被非正常終止而使數(shù)據(jù)庫數(shù)據(jù)失去一致性(正確性)
????– 如事務(wù)內(nèi)部故障盯漂、 系統(tǒng)故障等
恢復(fù)的實現(xiàn)技術(shù)(轉(zhuǎn)儲颇玷、 日志、 檢查點)
? 數(shù)據(jù)庫恢復(fù)的基本原理
????– 利用存儲在系統(tǒng)別處的冗余數(shù)據(jù)來重建
? 冗余數(shù)據(jù)包括
????– 日志文件
????– 數(shù)據(jù)備份
事務(wù)的原子性與日志
? 事務(wù)的原子性: 事務(wù)要么作為一個整體被執(zhí)行就缆, 要么根本不執(zhí)行帖渠。
? 日志是一個日志記錄的序列, 每個日志記錄記錄這某個事務(wù)的重要操作( 開始竭宰、 更新空郊、 提交或中止等) 。 日志的增長速度非城薪遥快狞甚。
? 事務(wù)的交錯執(zhí)行使日志更復(fù)雜, 僅在事務(wù)結(jié)束后記錄事務(wù)的全過程是不夠的廓旬。
? 在數(shù)據(jù)庫恢復(fù)時哼审, 對故障發(fā)生時已提交的事務(wù)進行重做(Redo), 對未提交的事務(wù)進行撤銷(Undo)孕豹, 從而保證所有事務(wù)的原子性棺蛛。
? 恢復(fù)管理器的第一個任務(wù)就是將所有事務(wù)劃分為已提交事務(wù)和未提交事務(wù)兩類。
支持Undo和Redo的日志記錄
Undo日志規(guī)則
(1) 對每一個更新操作都生成一條undo日志記錄
(2) 如果事務(wù)改變了數(shù)據(jù)庫元素x巩步, 那么日志記錄必須在
x的新值寫回磁盤之前寫到磁盤 (write aheadlogging,WAL);
(3) 如果事務(wù)提交桦踊, 則其Commit日志記錄必須在事務(wù)改變的所有數(shù)據(jù)庫元素已寫到磁盤后再寫磁盤椅野。
推斷: 如果事務(wù)T的Commit日志記錄已到達磁盤,該事務(wù)一定已經(jīng)完成籍胯。
使用Undo日志的恢復(fù)
系統(tǒng)故障的恢復(fù)策略
系統(tǒng)故障( 造成主存中的臨時數(shù)據(jù)丟失)
介質(zhì)故障( 造成磁盤中的數(shù)據(jù)丟失)
解決方法: 數(shù)據(jù)庫備份( archive) 竟闪, 即維護一個與數(shù)據(jù)庫本身分離的數(shù)據(jù)庫拷貝。
前提: 備份以來的日志被保存杖狼, 且日志自身在故障后仍存在炼蛤。
并發(fā)控制
并發(fā)操作可能造成的數(shù)據(jù)不一致現(xiàn)象及其原因
? 導(dǎo)致數(shù)據(jù)庫狀態(tài)不一致的可能原因
????– 故障發(fā)生
????– 并發(fā)事務(wù)對數(shù)據(jù)的共享
? 并發(fā)操作可能引起的數(shù)據(jù)不一致
????– 現(xiàn)象: 丟失修改、 不可重復(fù)讀蝶涩、 讀臟數(shù)據(jù)
????– 原因: 事務(wù)的隔離性被破壞理朋, 事務(wù)間相互干擾
可串行化調(diào)度的定義
? 可串行性: 多個事務(wù)的并發(fā)執(zhí)行是正確的絮识, 當且僅當其結(jié)果與按某一次序串行地執(zhí)行它們時的結(jié)果相同。
? 可串行性是并發(fā)事務(wù)操作是否正確的判別準則嗽上。
? 為了保證并發(fā)執(zhí)行的事務(wù)能保持數(shù)據(jù)庫的正確性次舌,DBMS的并發(fā)控制機制必須提供一定的手段來保證調(diào)度是可串行化的。
? 并發(fā)控制的思想: 調(diào)度器可能推遲一些操作的執(zhí)行兽愤, 甚至可能中斷一個事務(wù)彼念。
沖突可串行化調(diào)度的定義及判斷方法
? 沖突的操作: 涉及同一數(shù)據(jù)元素, 且至少有一個寫操作
? 如果通過一系列相鄰動作的非沖突交換能將他們中的一個轉(zhuǎn)換為另一個浅萧, 我們說兩個調(diào)度是沖突等價的逐沙。
? 如果一個調(diào)度沖突等價于一個串行調(diào)度, 我們說該調(diào)度是沖突可串行化的洼畅。
? 沖突可串行化調(diào)度是可串行調(diào)度的充分條件吩案,是商用系統(tǒng)中的事務(wù)調(diào)度器在需要保證可串行性時通常使用的條件。
封鎖協(xié)議及事務(wù)隔離程度
? 一級封鎖協(xié)議
????– 事務(wù)T在修改數(shù)據(jù)R之前須先對其加X 鎖土思, 直至事務(wù)結(jié)束
????– 可解決丟失修改問題
? 二級封鎖協(xié)議
????– 讀數(shù)據(jù)前加S鎖务热, 讀完即釋放
????– 寫數(shù)據(jù)前加X鎖直至事務(wù)結(jié)束
????– 可解決丟失修改和讀臟數(shù)據(jù)問題
? 三級封鎖協(xié)議
????– 讀數(shù)據(jù)前加S鎖直至事務(wù)結(jié)束
????– 寫數(shù)據(jù)前加X鎖直至事務(wù)結(jié)束
????– 可解決丟失修改、 讀臟數(shù)和不可重復(fù)讀問題