數據庫原理
數據庫系統概述
基本概念
數據:描述事務的符號記錄。
數據庫(DB):按一定的數據模型組織,描述和存儲在計算機內的,有組織的,可共享的數據集合。
數據庫管理系統(DBMS):位於用戶和操作系統之間的一層數據管理軟件。主要功能包括:
數據定義功能:DBMS提供DDL,用戶通過它定義數據對象。
數據操縱功能:DBMS提供DML,用戶通過它實現對數據庫的查詢,插入,刪除和修改等操作。
數據庫的運行管理:DBMS對數據庫的建立,運行和維護進行統一管理,統一控制,以保證數據的安全性,完整性,並發控制及故障恢復。
數據庫的建立和維護功能:數據庫初始數據的輸入,轉換,數據庫的轉儲,恢復,重新組織及性能監視與分析等。
數據庫系統(DBS):計算機中引入數據庫後的系統,包括:數據庫DB,數據庫管理系統DBMS,應用系統,數據庫管理員DBA和用戶
數據管理與數據處理
數據管理:對數據收集,整理,組織,存儲,(對象) 維護,檢索,傳送,(操作)等,目標:在妥當的時候以妥當的形式給妥當的人提供妥當的數據。
數據處理:對數據進行加工,計算,提煉,從而產生新的有效數據的過程(數據--》信息)
管理與處理的關系:管理是處理的基礎,處理為管理服務
數據管理的發展階段
人工管理階段(50年代中期以前)
文件系統階段(50年代中期至60年代後期)
數據庫系統階段(60年代後期以後)
數據模型
數據處理的抽象過程:現實世界--抽象》信息世界--轉換》機器世界(數據世界)
概念模型(信息模型):把現實世界中的客觀對象抽象成的某種信息結構,主要用於數據庫設計。
實體與記錄
信息世界
實體:客觀存在並可相互區分的事務。
實體集:性質相同的同類實體的集合。
屬性:實體具有的某一特性。
實體標識符:能將一個實體與其他實體區分開來的一個或一組屬性。
數據世界
記錄:實體(抽象表示)
文件:實體集
字段或數據項:屬性
關鍵字:實體標識符。唯一地標識一個記錄。又稱碼,鍵。
型與值
在DBS中,每一個對象廣義上講都有型與值之分:
型是對象的結構或特性描述。
值是一個具體的對象實例。
類似於程序實際語言中數據類型與數據值
實體間的聯系
實體內部的聯系:反應在數據上就是記錄內部數據項間的聯系(1對1,1對多,多對多)
實體之間的聯系:反應在數據上就是記錄之間的聯系
數據模型
是對現實世界進行抽象的工具,它按計算機系統的觀點對數據建模,用於提供數據庫系統中信息表示和操作手段的形式框架,主要用於DBMS的實現,是數據庫系統的核心和基礎。
常用的數據模型:層次模型,網狀模型,關系模型,面向對象模型
數據模型的三要素:數據結構(靜態)--》如何表示實體及聯系,數據操作(動態)--》如何實現增刪改查,完整性約束--》如何保證數據的約束條件得到滿足
層次模型:用樹形結構來表示實體以及實體間聯系的模型。
網狀模型
關系模型
DBS的結構
DBS的三級模式結構
模式:又稱邏輯模式,DB的全局邏輯結構,即DB中全體數據的邏輯結構和特征的描述。模式定義的任務:定義全局邏輯結構(構成記錄的屬性名,類型,寬度等)。定義有關的安全性,完整性要求,定義記錄間的聯系。
外模式:又稱子模式或用戶模式,DB的局部邏輯結構,即與某一應用有關的數據的一個邏輯表示。
說明:外模式是某個用戶的數據視圖,模式是所有用戶的公共數據視圖,一個DB只能有一個模式,但可以有多個外模式。外模式通常實模式的子集,但可以在結構,類型,長度等方面有差異。DBS提供外模式DDL。
內模式:又稱存儲模式。數據的物理結構和存儲方式的描述,即DB中數據的內部表示方式。一個數據庫只有一個內模式,內模式定義的任務:記錄存儲格式,索引組織方式,數據是否壓縮,是否加密等。
兩級映像及其作用
模式變,可修改映象使外模式保持不變,從而應用程序不必修改,保證了程序和數據的邏輯獨立性。
存儲結構變,可修改映象使邏輯結構(模式)保持不變,從而應用程序不必修改,保證了數據與程序的物理獨立性。
數據庫系統的組成
數據庫:一個或多個數據庫,四要素:用戶數據,元數據,索引,應用元數據
軟件:操作系統,數據庫管理系統(DBMS),數據庫應用開發工具等輔助軟件,具有數據庫接口的高級語言與編譯系統,如C,C++等,某個數據庫應用系統
人員:用戶(使用),應用程序員(開發),數據庫管理員DBA(管理)
硬件:計算機有關設備。
數據庫系統研究的對象:三個主要研究領域:DBMS及其輔助軟件,數據庫設計,數據庫理論
關系數據庫
關系數據庫是應用數學方法來處理數據的,它具有結構簡單,理論基礎堅實,數據獨立性高以及提供非過程性語言等優點。
關系的數學定義
域:值的集合。它們具有相同的數據類型,語義上通常指某一對象的取值範圍。
笛卡爾積:沒有任何條件的關聯
關系
關系模型
三部分:關系數據結構,關系操作集合,關系的完整性
數據結構
單一的數據結構
關系模式
關系的三種形式:
基本關系:客觀存在的基本表
查詢表:由基本表按一定條件檢索得到的結果
試圖:從一個或多個基本關系上導出的關系。它不對應實際的存儲數據,是一個虛關系,然而可永久存在,相當於關系模型的外模式。
關系操作
種類:選擇,投影,連接,除,並,交,差,(查詢操作)增加,刪除,修改(維護操作)
關系模型的三類完整性
實體完整性,參照完整性,用戶定義的完整性,
關系數據庫標準語言--SQL
數據查詢():SELECT
數據定義(DDL):CREATE,DROP,ALTER
數據操縱:INSERT,DELETE,UPDATE
數據控制:GRANT,REVOKE
關系系統及其查詢優化
全關系系統準則:信息準則,保證訪問準則,空值的系統化處理,基於關系模型的動態的聯機數據字典,統一的數據子語言準則,試圖更新準則,高級的插入修改刪除操作,數據物理獨立性,數據邏輯獨立性,數據完整性的獨立性,分布獨立性,無破壞準則。
優化的一般策略:
選擇,投影運算應盡可能先做,好處是減少下一步運算的數據量
選擇和投影運算同時進行,好處是掃描關系的次數
在執行連接前對文件適當 的預處理
把投影同起前或其後的雙目運算結合起來
把某些選擇和笛卡爾積乘積結合起來成為連接運算
找出公共子表達式
關系代數表達式的優化
語法樹:用來表示關系代數表達式的一棵樹,其內結點表示一種運算,葉結點表示一個關系。
關系代數表達式的優化算法:
分解選擇
選擇下移
投影下移
選擇,投影合並
按點分組(每組只有一個二元運算)
生成程序
優化的一般步驟
把查詢轉換成某種內部表示,如語法樹,
按優化算法對語法樹進行優化(標準形)
選擇底層的存取路徑(充分考慮索引,數據的存儲分布,然後選取存儲路徑)
生成查詢計劃,選擇代價最小的(如對連接運算,考慮各種實現策略,從中選出代價最小的)
關系數據理論
為什麽不合適的關系模式會帶來插入異常,刪除異常,存儲異常,修改困難等嚴重問題
深刻理解函數依賴,多值依賴等有關概念
掌握關系的1NF,2NF,3NF,BCNF,4NF的概念和特征
掌握函數依賴的公理系統,求屬性集的閉包算法以及求極小函數依賴集的方法等
掌握模式分解的無損連接性和保持函數依賴性以及分解算法
數據庫設計
數據庫設計的特點:”三分技術,七分管理,十二分基礎數據“,數據庫設計和應用系統設計相結合,即將結構設計和行為設計相結合
數據庫設計方法中著名的新奧爾良方法,將數據庫的設計分為四個階段:需求分析(分析用戶要求),概念設計(信息分析和定義),邏輯設計(設計實現),物理設計(物理數據庫設計)。
需求分析
概念結構設計
將需求分析得到的用戶需求抽象為信息結構即概念模型的過程就是概念結構設計。
概念結構設計的方法:自頂向下,自底向上,逐步擴張,混合策略
邏輯結構設計
邏輯結構分三步進行:將概念結構轉換成一般的關系,層次,網狀模型
將轉換來的關系,層次,網狀模型向特定的DBMS支持下的數據模型轉換
對數據模型進行優化
物理結構設計
關系模式的存取方法選擇,常用的存取方法:索引方法,B+樹方法,Cluster方法,HASH方法,
數據庫的實施和維護
事務管理——數據庫恢復技術
掌握事務的概念及性質
事務(transaction):一個數據操作序列(主要是更新操作),是數據庫應用程序的基本邏輯單元。這些操作要麽都做,要麽都不做,是一個不可分割的執行單位。
事務標記:BEGIN TRANSACTION(事務開始) COMMIT(事務提交:事務完成了其包含的所有活動,正常結束),ROLLBACK(事務回滾:撤銷已做的所有操作,回到事務開始時的狀態)。
事務應具有的性質:原子性(Atomiccity):事務執行時的不可分割性,即事務所包含的活動要麽都做,要麽都不做。若事務因故障而中止,則要設法消除該事務所產生的影響,使數據庫恢復到該事務執行前的狀態。
一致性(Consistency):事務對數據庫的作用應是數據庫從一個一致狀態到另一個一致狀態。
隔離性(Isolation):多事務並發執行,應像各事務獨立執行一樣,不能相互幹擾。一個正在執行的事務其中間結果不能為其他事務所訪問。
持久性(Durability): 一旦事務提交,不論執行何種操作或發生任何故障,都不應對事務的執行結果有任何影響。
可串行性(Serializability):並發控制正確性的標準用戶程序在邏輯上是正確的,它在串行執行時沒有問題,當多個事務並發執行時,可以等價於一個串行執行序列。
事務管理又分為兩個方面:
恢復:保證事務在故障時滿足上述性質的技術。
並發控制:保證事務在並發執行時滿足上述性質的技術。
掌握數據庫恢復的基本技術和策略
故障的種類:
事務內部的故障:可以通過事務程序本身發現並處理的故障。非預期的故障(不能由應用程序處理),如運算溢出,被零除,發生死鎖時被選中撤銷等。
系統範圍內的故障:軟故障,造成系統停止的任何事件,如CPU故障,操作系統故障,程序代碼錯誤,斷電等。
介質故障:硬故障,如磁盤損壞,磁頭碰撞,強磁場幹擾等
計算機病毒。
恢復的實現技術:
數據庫恢復的機制:
建立冗余數據:數據轉儲,登記日誌文件
利用冗余數據實施數據庫恢復
數據轉儲與恢復:
轉儲:DBA定期將整個數據庫復制到磁帶或者另一個磁盤上保存起來的過程。
恢復:當數據庫被破壞後可將後備副本重新裝入,並重新運行轉儲以後的所有更新事務。
轉儲的狀態
靜態轉儲:靜態轉儲得到的一定是一個數據一致性的副本。因為轉儲必須等用戶事務全部結束才能進行,而且新的事務必須等到轉儲完畢才能開始執行,但數據庫的可用性被降低。
動態轉儲:轉儲和用戶事務可並發執行,即不必等待正在運行的事務結束,也不影響新事務的運行。但轉儲的數據可能已過時。為此,必須建立日誌文件,記錄轉儲期間對數據庫的更新活動,這樣,後援副本加日誌文件就能把數據庫恢復到某個時刻的一致性狀態。
轉儲方式:
海量轉儲:每次轉儲全部數據庫(一般每周一次)
增量轉儲:只轉儲上次轉儲後更新的過程(一般每天一次)
轉儲方法:
動態海量,靜態海量,動態增量,靜態增量
日誌文件和恢復:
日誌用來對數據庫的更新操作的文件。
動態轉儲方式必須建立日誌文件
靜態轉儲方式最好建立日誌文件
日誌原則:嚴格按並發事務執行的時間次序登記,先寫日誌文件,後寫數據庫。
恢復策略
利用日誌文件進行恢復
基本策略:對於尚未提交的事務,執行撤銷處理(UNDO),對於已經提交的事務,執行重做處理(REDO),在日誌文件中設置檢查點記錄
事務管理--並發控制
並發操作可能造成的不一致性:
丟失修改:兩事務讀出同一數據並修改,先寫回的數據修改丟失。
不可重復讀:事務T1讀取某一數據,事務T2讀取並修改了同一數據。事務T1為了對讀取值進行校對再讀此數據,得到了不同的結果。
讀出“臟”數據:事務T1修改某一數據,事務T2讀取同一數據;事務T1由於某種原因被撤銷,則T2讀到的就是“臟”數據。
產出上述三類不一致性的主要原因就是並發操作破壞了事務的隔離性。
並發控制就是要用正確的方式調度並發操作,使某個事務的執行不受其他事務的幹擾。
並發控制的技術是封鎖,即事務在修改某個對象前,先鎖住該對象,不允許其他事務讀取或修改該對象,修改完畢或事務完成後再將鎖打開。
封鎖
封鎖的類型:
排它鎖:(簡稱X鎖,又稱互斥鎖)若事務T對數據對象R加上X鎖,則只允許T讀,寫R,禁止其他事務對R加任何鎖,相應的其他事務就無法讀寫對象R。
共享鎖:(簡稱S鎖)若事務T對數據對象R加上S鎖,則T可以讀R,但不可以寫R,且其他事務可以對R加S鎖,但禁止加X鎖。這保證了事務T在釋放R的S鎖之前,其他事務只可以讀R,不可以修改R。
封鎖協議:
一級封鎖協議:事務T在修改數據對象R之前必須先對其加X鎖,直到事務結束才釋放。
二級封鎖協議:1級封鎖協議+事務T在讀取數據對象R之前必須先對其加S鎖,讀完即釋放S鎖。作用:防止丟失修改,保證事務是可恢復的,防止讀“臟”數據。
三級封鎖協議:1級封鎖協議+事務T在讀取數據對象R之前必須先對其加S鎖,S鎖也是直到事務結束才釋放。作用:防止丟失修改,保證事務是可恢復的,防止讀“臟”數據,保證可重復讀。
活鎖和死鎖
活鎖(Livelock):數據對象不斷處於上鎖,開鎖的交替狀態,某個事務有可能為該對象上鎖,但始終沒有得到上鎖機會而永久等待下去的情形。避免活鎖:采用先來先服務策略。
死鎖(Deadlock):多個事務因封鎖沖突(競爭資源)而永遠等待下去的情形。
死鎖問題的解決方法:
預防死鎖:一次封鎖法,順序封鎖法(都不是很適合)
診斷死鎖並解除:
超時法:當一個事務的等待時間超過了規定的時限,就認為發生了死鎖。很難確定一個合理的時限。
等待圖法:用一個有向圖表示事務等待的情況。
並發調度的可串行性:
調度(Schedule):若幹個事務的操作構成的序列。
串行與並發:對調度S中的兩個事務Ti和Tj,若S中Ti的操作都在Tj的操作之前(或反之),則稱Ti,Tj是串行執行的,否則稱作是並發執行的。若調度S中的所有事務都是串行執行的,則稱S是串行的(Serial)。
可串行化:多個事務的並發執行是正確的,當且僅當其結果與按某一個序串行的執行他們時 的結果相同,稱這種調度為可串行化的調度。
兩段鎖協議
兩段封鎖協議:(簡稱2PL)在對任何數據進行讀,寫操作之前,事務首先要申請並獲得對該數據的封鎖(讀時S鎖,寫時X鎖);在釋放一個封鎖之後,事務不再申請和獲得新的封鎖。事務封鎖分兩個階段:擴展階段,只進行上鎖;收縮階段,只進行解鎖。
2PL的正確性:定理:若所有事務都遵守兩段封鎖協議,則對這些事務的任何並發調度策略都是可串行化的。
封鎖的粒度
意向鎖:用來指示下級節點正在被加鎖的鎖。對任一結點加鎖時,必須先對其上級結點加意向鎖。
數據庫安全性
用戶標識和鑒別
數據存取控制
定義用戶權限:對數據對象運行執行的操作類型。
合法權限檢查
自主存取控制方法
強制存取控制方法
視圖機制
審計
數據加密
SQL的安全性方法
安全保密與系統開銷
數據庫完整性
完整性約束條件
數據庫的完整性:只數據的正確性和相容性。作用:防止數據庫中存在不符合語義的數據,防止錯誤信息的輸入輸出,主要防範對象是不符合語義的數據。
數據庫的安全性:保護數據庫,防止非法存取和惡意破壞,主要防範對象是非法用戶和非法操作。
完整性檢查:DBMS提供一定的機制來檢查數據庫中的數據,看其是否滿足語義規定的條件。
完整性約束條件是對數據語義上的要求
模式定義時對數據類型等的說明是對數據語法上的要求
完整性約束條件作用的對象:關系,元組,列
靜態約束:確定狀態時,數據對象所應滿足的約束條件,是反映數據庫狀態合理性的約束。
動態約束:數據庫從一種狀態轉變為另一種狀態時,新,舊值之間所應滿足的約束條件,是反映數據庫狀態的變遷的約束。
完整性約束條件分類
靜態列級約束
靜態元組約束
靜態關系約束
動態列級約束
動態元組約束
動態關系約束
完整性控制機制
DBMS的完整性控制機制
定義功能,提供定義完整性約束條件的機制。
檢查功能,檢查用戶操作是否違背了完整性約束條件
拒絕違背完整性約束條件的用戶操作,保證數據完整性
立即執行約束:事務中更新語句執行完後就進行完整性檢查
延遲執行約束:整個事務執行完後才進行完整性檢查
完整性約束條件分類
對關系數據庫,有實體完整性,參照完整性,用戶定義的完整性。
參照完整性實現中的幾個問題
外碼能否接受空值的問題
在被參照關系中刪除元組的問題
在參照關系中插入元組時的問題
修改關系中主碼的問題
SQL中的完整性方法
實體完整性:用NOT NULL指明要求非空,UNIQUE指明要求唯一等
參照完整性
數據庫原理