一、數據庫系統
現實世界到數據要經過三個領域:現實世界到信息世界(也稱概念模型,由數據庫設計人員完成),信息世界到計算機世界
1、什么是數據(data)和數據庫(database)?
數據是數據庫中存儲的基本對象,數據庫是長期存儲在計算機內、有組織、可共享的大量數據集合。
數據庫數據的三個基本特點:
- 永久存儲
- 有組織
- 可共享
2、簡述數據管理技術的發展過程?
人工管理階段:
- 數據不保存
- 應用程序管理數據
- 數據不共享
- 數據不具有獨立性
文件系統階段:
- 數據可以長期保存
- 由文件系統管理數據
- 數據共享性差,冗余度大
- 數據獨立性差
數據庫系統階段:
- 數據可以長期保存
- 由數據庫管理系統統一管理和保存
- 數據結構化
- 數據共享性高,冗余度低且易擴充
- 數據獨立性高
在人工管理階段沒有專門的軟件對數據進行管理
3、簡述數據庫管理系統的功能
用來科學地組織和存儲數據、高效地獲取和維護數據。
- 數據定義功能
- 數據組織、存儲和管理
- 數據操縱功能
- 數據庫的事務管理和運行管理
- 數據庫的建立和維護功能
- 其他功能
4、DBMS對數據的控制功能主要體現在
- 數據安全性保護
- 數據完整性檢查
- 數據庫故障恢復
- 並發控制
5、簡述數據庫系統的組成
數據庫是長期存儲在計算機內,有組織、可共享的大量數據的集合;
數據庫系統是由數據庫、數據庫管理系統(及其應用開發工具)、應用程序和數據庫管理員組成的存儲、管理、處理和維護數據的系統。
數據庫系統的核心是數據庫管理系統DBMS
DBMS中實現事務持久性的是恢復管理子系統
應用數據庫的主要目的是為了共享數據
數據庫系統管理數據的主要特點是:
- 數據結構化
- 數據獨立性高
- 數據共享性高、冗余度低、易擴充
- 數據由DBMS統一管理和控制
6、數據庫管理員DBA 的職責是
數據庫管理員DBA的職責是完整性約束說明和數據庫安全
- 決定數據庫中的信息內容和結構
- 決定數據庫的存儲結構和存取策略
- 定義數據的安全性要求和完整性約束條件
- 監控數據庫的使用和運行
- 數據庫的改進和重組、重構
7、常用的數據模型(邏輯模型):
- 層次模型:用樹型結構表示實體類型及實體間聯系。
- 網狀模型:允許一個以上的結點無雙親;一個結點可以有多於一個的雙親;用圖結構表示實體類型及實體間聯系。
- 關系模型:以二維表格結構來表示實體類型及實體間聯系
8、數據模型應包括哪三個部分?試分別解釋之。
數據模型包含數據結構,數據操縱,數據的完整性約束條件三個部分。
- 數據結構:描述數據庫的組成對象以及對象之間的聯系。
- 數據操作:是指對數據庫中的各種對象(型)的實例(值)允許執行的操作的集合·,包括操作及有關的操作規則。
- 數據的完整性約束條件是一組完整性規則。
數據庫系統結構為三級模式兩級映像結構,對保證數據的獨立性起到至關重要的作用。
11、簡述數據庫體系結構及其數據獨立性的關系:
數據庫系統可以概括為三級模式和二級映像,三級模式分別為外模式、模式和內模式,二級映像為外模式/模式映像和模式/內模式映像。模式是數據庫整體邏輯結構的描述,一個數據庫對應一個模式;外模式是數據庫與外部應用程序對應的局部邏輯描述,一個數據庫可以有多個外模式;內模式是數據庫內部與存儲及物理環境相關的邏輯描述,一個數據庫對應一個內模式
模式也稱邏輯模式,是數據庫中全體數據的邏輯結構和特征的描述,是所有用戶的公共數據視圖。模式是數據庫的中心和關鍵。
12、數據庫的獨立性分為物理獨立性和邏輯獨立性。邏輯獨立性是指外部的應用程序不會因為數據庫邏輯結構的改變而改變,是由外模式/模式映像支持的;物理獨立性是指外部應用程序不必因為數據庫內部存儲結構的改變而改變,是由模式/內模式映像所支持。
13、數據庫的物理獨立性:用戶的應用程序與存儲在磁盤上數據庫的數據是相互獨立的
14、數據庫的概念模型獨立於具體的機器和DBMS
二、數據庫設計
E-R圖就是數據庫的概念模式
從數據流圖構造E-R圖,選擇實體應先考慮數據流圖中的數據存儲
12、數據庫設計的基本步驟有哪些?
- 需求分析:包含數據流圖和數據字典描述;最困難,最耗時
- 概念結構設計:關系規范化處理
- 邏輯結構設計:建立索引
- 物理結構設計:選擇存儲結構、確定存取方法及路徑等內容
- 數據庫實施
- 數據庫運行和維護
13、E-R圖提供了表示實體型、屬性和聯系的方法
- 實體型用矩形表示
- 屬性用橢圓形表示
- 聯系用菱形表示
14、E-R圖的三種沖突
- 屬性沖突:屬性域沖突和屬性取值單位沖突
- 命名沖突
- 結構沖突
15、簡述E-R圖向關系數據模型轉換的原則
每個實體都轉換為一個關系模式
對圖中聯系的轉換由聯系的類型分三種情況:
- 1:1可以轉換為一個獨立的關系模式,也可以與任意一端對應的關系模式合並
- 1:N可以轉換為一個獨立的關系模式,也可以與n端對應的關系模式合並
- N:M轉換為一個關系模式
三、關系數據庫
1、關系代數問題:
關系代數的五種基本操作:選擇、投影、並、差、笛卡爾積
集合運算符:並、差、交、笛卡爾積
專門的關系運算符:選擇、投影、連接、除
2、關系代數表達式的語法樹中,葉子結點是關系,非葉子結點是操作
3、關系代數運算是以集合運算為基礎的運算,其中,從一個數據庫文件中取出滿足某個條件的所有記錄形成的一個新的數據庫文件的操作是選擇操作。
4、簡述關系的三類完整性約束
- 實體完整性:主碼的屬性值不能為空
- 參照完整性:是指兩個表的主關鍵字和外關鍵字的數據應一致,保證了表之間數據的一致性,防止了數據丟失或無意義的數據在數據庫中擴散。
- 用戶自定義完整性:對特定關系數據庫的約束條件,反映某一具體應用必須滿足的語義要求。
5、與傳統的關系模型比較,對象關系模型有哪些擴充?
數據類型的擴充:引入符合類型(結構、數組、多集和集合類型)。在類型一級和表一級實現繼承性(單重繼承性和多重繼承性)。定義引用類型。
6、關系模式的關鍵字:可由一個或多個其值能唯一標識該關系模式中任何元組的屬性組成
7、連接不會去掉重復列,而自然連接會去掉重復列
8、
超碼:是一個或多個屬性的集合,超碼中的這些屬性可以讓我們在一個實體集中唯一地標識一個實體。
候選碼:候選碼是極小的超碼集,也就是它的任意真子集都不是超碼,而他本身是超碼。
主碼:若一個關系有多個候選碼,則選定其中的一個為主碼
一個關系只有一個主鍵
候選碼的諸屬性稱為主屬性,不包含在任何候選碼中的屬性稱為非主屬性
在最極端的情況下,關系模式的所有屬性是這個關系模式的候選碼,稱為全碼
四、SQL
17、SQL語言問題:
SQL語言是非過程化的語言,是關系數據庫語言,具有
數據定義(create,drop,alter)、
數據操縱(update,delete,insert)、
數據控制(grant,revoke)、
數據查詢(select)的功能;
有兩種基本使用方式,交互式SQL和嵌入式SQL
修改表的結構alter
對基本表的刪除命令是DROP,對表中數據的刪除命令是DELETE
HAVING用來篩選滿足條件的分組
GRANT 和 REVOKE 兩個語句分別是授予權限和回收權限語句,具有對 SQL語言的安全控制功能
五、數據庫的安全性
1、數據庫安全性控制的一般方法:
- 用戶身份鑒別
- 多層存取控制
- 審計
- 視圖
- 數據加密
2、存取控制
常用的存取控制方法:索引、hash、聚簇
存取控制:自主存取控制(DAC),強制存取控制(MAC)
實現強制存取控制時要首先實現自主存取控制
用戶權限是由兩個要素組成的:數據庫對象和操作類型
定義存取權限稱為授權,數據庫管理系統提供的授權功能用來控制不同用戶訪問數據的權限,主要目的是實現數據庫的安全性。
3、自主存取控制:用戶可以將擁有的權限轉給他人
授予權限:GRANT 權限 ON 表 TO 用戶 WITH GRANT OPTION 表示可以再授予其他用戶
收回權限:CASCADE 級聯收回所有從這個用戶身上出去的權限,相反的就是RESTRICT
4、強制存取控制:DBMS為每一個實例指派一個敏感度標記,主體是系統中的活動實體,客體是系統中的被動實體,受主體的操控。主體的敏感度標記叫做許可證級別,客體的叫密級
主體的許可證級別大於或等於客體的密級,主體才能讀客體
主體的小於等於客體,主體才能改客體
5、視圖問題
SQL中的視圖提高了數據庫系統的安全性
SQL中的視圖是由基本表或視圖產生的虛表,其結構和數據是建立在對表的查詢的基礎上的。
數據庫中實際存放的是視圖的定義
視圖上不能定義新的表
基本表有對應的物理存儲,視圖沒有對應的物理存儲
為了簡化用戶的查詢操作,不增加數據的存儲空間,常用方法是創建視圖。索引是加快查詢
由於視圖是不實際存儲數據的虛表,因此對視圖的更新最終要轉換為對基本表的更新
6、視圖更新的規定
- 若視圖是由兩個以上基本表導出的,則此視圖不允許更新
- 若視圖的字段來自字段表達式或常數,則不允許對此視圖執行INSERT和UPDATE操作,但允許執行DELETE操作
- 若視圖的字段來自聚集函數,則此視圖不允許更新
- 若視圖定義中含有CROUP BY子句,則此視圖不允許更新
- 若視圖定義中含有DISTINCT短語,則此視圖不允許更新
- 若視圖定義中有嵌套查詢,並且內層查詢的FROM子句中涉及的表也是導出該視圖的基本表,則視圖不允許更新
- 若視圖是由單個表的列構成,但並沒有包括主鍵,則不能更新
- 若視圖時從單個表使用選擇、投影操作導出的,並且包含了基本表的主鍵,則可以更新
7、視圖的作用
視圖能簡化用戶的操作
視圖使用戶能以多種角度看待同一數據
視圖對重構數據庫提供了一定程度的邏輯獨立性
視圖能夠對機密數據提供安全保護
恰當利用視圖可以更清晰的表達查詢
六、數據的完整性
1、什么是計算機系統完整性?完整性約束條件作業的對象?
數據的完整性是指數據的正確性和相容性,防止不合語義的數據進入數據庫。
列:對屬性的取值類型、范圍、精度等的約束條件
元組:對元組中各個屬性列間的聯系的約束
關系:對若干元組間、關系集合上以及關系之間的聯系的約束
2、為維護數據庫的完整性,數據庫管理系統必須實現:
- 提供完整性約束條件的機制
- 提供完整性檢查的方法
- 進行違約處理
SQL語句中完整性約束條件除可在CREATE TABLE中定義外,還可以使用子句定義,引導該子句的關鍵字為CONSTRAINT(constraint 強制、約束)
七、查詢優化
查詢優化分為代數優化(也稱邏輯優化:關系代數表達式的優化)和物理優化(通過選擇存取路徑和底層算法優化)
查詢處理主要分為四步:
- 查詢分析
- 查詢檢查
- 查詢優化
- 查詢執行
24、試述RDBMS查詢優化的一般准則?
- 選擇運算盡可能先做
- 把投影運算和選擇運算同時進行
- 把投影同其前后的雙目運算結合起來執行
- 選擇和笛卡爾積編成自然連接
- 找出公共子表達式
- 選取合適的連接算法
八、關系數據理論
規范化理論用來改造關系模式,通過分解關系模式來消除其中不合適的數據依賴以解決插入異常、刪除異常、更新異常和數據冗余問題。
數據冗余(系主任名字重復出現)
更新異常(改系主任,每個元組都要改)
插入異常(沒學生,系主任插入不了)
刪除異常(學生走了,系主任信息沒了)
在關系模式R(U,F)中。如果F是最小函數依賴集,則R的規范化程度與F為最小函數依賴集無關
第一范式1NF:所有屬性不可再分,即數據項不可分
第二范式2NF:消除關系模式中非主屬性對碼的部分函數依賴
第三范式3NF:在2NF基礎上,消除關系模式中非主屬性對碼的傳遞函數依賴
BC范式BCNF:在3NF基礎上,消除關系模式中主屬性對碼的部分依賴和傳遞依賴。
第四范式4NF:限制關系模式的屬性之間不允許有非平凡且非函數依賴的多值依賴。
關系模型中的關系模式至少是1NF
當關系模型中的關系模式已屬於3NF時,仍存在一定的插入和刪除異常
若關系模式R中的屬性都是主屬性,則R的最低范式為3NF,最高必定是3NF,可能為BCNF。
任何二元關系模式的最高范式必是BCNF 對關系模式進行分解時,要求保持函數依賴,最高可以達到3NF
由全碼組成的關系模式,最高可以達到的模式為BCNF
關系模式分解為BCNF后,函數依賴關系可能被破壞
若關系模式R中,其函數依賴集中所有候選關鍵字都是決定因素,則R最高范式是4NF
當B屬於函數依賴與A屬性時,屬性A與B的聯系是多對一
2NF基本消除插入異常
在關系模式分解時,若要保證不丟失信息,分解應具有無損連接性
無損連接:將一個關系模式分解成若干個關系模式后,通過自然聯接和投影等運算仍能還原到原來的關系模式,則稱這種分解為無損聯接分解。
九、數據庫恢復技術
1、什么是事務(Transaction),事務和程序的區別?
事務是用戶定義的一個數據庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。
事務是數據庫恢復和並發控制的基本單位
事務的特性(ACID):
- 原子性 A:事務是數據庫邏輯工作單位,事務中包括的諸操作要么都做,要么都不做(最根本)
- 一致性 C:事務執行的結果必須是使數據庫從一個一致性狀態變到另一個一致性狀態
- 隔離性 I:一個事務的執行不能被其他事務干擾,即一個事務內部操作及使用的數據對其他並發事務是隔離的
- 持久性 D:一個事務一旦提交,它對數據庫中的數據的改變就應該是永久的
事務和程序是兩個概念:在關系數據庫中,一個事務可以是一條SQL語句,一組SQL語句或整個程序;一個應用程序通常包含多個事務。
為保證事務的隔離性和一致性需要並發控制
解決並發操作帶來的數據不一致問題采用封鎖技術
2、數據庫故障可分為
- 事務故障:算數溢出、死鎖等
- 介質故障:由於磁盤損壞或外存信息丟失所產生的故障
- 系統故障:是指造成系統停止運轉的任何事件,使得系統要重新啟動(會造成內存數據丟失)
3、數據庫恢復
- 事務故障:事務沒有達到預期的終點,恢復操作為事務撤銷(UNDO)
- 系統故障:恢復操作為撤銷故障發生時未完成的事務,重做已完成的事務(UNDO + REDO)
- 介質故障:磁盤上的數據和日志文件被損毀,很嚴重。恢復方法為重裝數據庫,重做已完成的事務。(重裝備份並恢復到一致性狀態 + UNDO+REDO)
制作數據后援副本的過程稱為轉儲
數據依賴是一個關系內部屬性與屬性之間的一種約束關系。其中最重要的是:函數依賴、多值依賴
冗余是數據庫恢復的原理;數據庫中,導致數據不一致的根本原因也是數據冗余度大。
3、日志文件
事務故障和系統故障必須用日志文件
動態轉儲必須用日志文件
先寫日志,在寫數據庫
用於數據庫恢復的重要文件:日志文件
日志文件用於記錄對數據的所有更新操作
創建日志的目的是為了可以恢復已經損壞的數據庫
4、數據鏡像可用於數據庫恢復,也可以用於並發操作。
5、數據轉儲是數據庫恢復技術中采用的基本技術,其所采用的備份數據被稱為后備副本。
22、數據的轉儲
6、數據轉儲是數據庫恢復中采用的基本技術
兩種轉儲方式:海量轉儲、增量轉儲
兩種轉儲狀態:動態轉儲、靜態轉儲
十、並發控制
並發控制要解決的根本問題是保持數據庫狀態的一致性
1、數據庫並發操作通常會帶來的問題
- 丟失修改
- 不可重復讀
- 讀“臟”數據
2、鎖是什么?
事務是並發控制的基本單位,鎖是實現事務的關鍵,鎖可以保證事務的完整性和並發性。
3、什么是排他鎖?什么是共享鎖?
排他鎖又稱寫鎖。若事務T對數據對象A加上X鎖,則只允許T讀取和修改A,其他任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖為止。這就保證了其他事務在T釋放A上的鎖之前不能再讀取和修改A。
共享鎖又稱讀鎖。若事務T對數據對象A加上S鎖,則事務T可以讀A但不能修改A,其他事務只能再對A加S鎖,而不能加X鎖,直到T釋放A上的S鎖為止。這就保證了其他事務可以讀A,但在T釋放A上的S鎖之前不能對A做任何修改。
事務對數據庫數據進行查詢操作時,必須首先獲得對該數據集合的共享鎖。
4、什么是活鎖與死鎖?
活鎖:是指當事務T1封鎖了數據R,事務T2請求封鎖數據R,於是T2等待,當T1釋放了R上的封鎖后,系統首先批准了T3請求,於是T2仍等待,當T3釋放了R的封鎖后,又批准了T4請求……使得T2可能永遠等待。這種現象就是活鎖。
一個事務一直等待資源
避免活鎖的簡單方法就是采用先來先服務的策略。
死鎖:是指兩個以上的事務分別請求封鎖對方已經封鎖的數據,導致長期等待而無法繼續運行下去的現象叫做死鎖
死鎖預防:一次封鎖法,順序封鎖法
死鎖診斷解除:超時法,等待圖法
5、封鎖協議
數據庫的並發操作帶來的數據庫數據不一致問題,可以利用封鎖解決。
DBMS普遍采用封鎖方法來保證調度的正確性。
- 一級封鎖協議:事務T在修改數據R之前必須先對其加X鎖,直到事務結束才釋放。可以防止丟失修改
- 二級封鎖協議:在一級封鎖協議基礎上增加事務T在讀取數據R之前必須先對其加S鎖,讀完后即可釋放S鎖。除可以防止丟失修改,還可以進一步防止讀“臟”數據。
- 三級封鎖協議:在一級封鎖協議的基礎上增加事務T在讀取數據R之前必須先對其加S鎖,直到事務結束才釋放。除了防止丟失修改和讀“臟”數據外,還進一步防止了不可重復讀。
6、封鎖的粒度
封鎖對象的大小稱為封鎖粒度。
封鎖粒度與系統的並發度和並發控制的開銷密切相關。封鎖的粒度越大,數據庫所能夠封鎖的數據單元就越少,並發度就越小,系統開銷也越少;反之,封鎖的粒度越小,並發度較高,但系統開銷也就越大。
7、並發調度的可串行化
DBMS對並發事務不同的調度可能會產生不同的結果,多個事務的並發執行是正確的,當且僅當其結果與按某一次序串行執行這些事務時的結果相同,稱這種調度策略為可串行化調度。可串行性(serializability)是並發事務正確調度的准則。
事務遵守兩段鎖協議是可串行化調度的充分條件
8、兩段鎖協議是指所有的事務必須分兩個階段對數據項加鎖和解鎖
9、事務處理技術主要包括並發控制和數據庫恢復技術
10、簡述DB的並發控制和恢復有什么關系?
如果采用封鎖機制,事務並發操作時有可能產生死鎖。為了解除死鎖狀態,就必須抽取某個事務作犧牲品,把它撤銷,做回退操作,這就屬於DB的恢復范疇。
數據庫系統中的三級模式定義存放在數據字典中
視圖建立后,在數據字典中存的是產生視圖的表定義
抽象機制包括:分類、聚集、概括
解答題
1、求候選碼
R:只出現在右邊的屬性
L:只出現在左邊的屬性
N:兩邊都沒有出現的屬性
LR:兩邊都出現過的屬性
L中的屬性一定會出現在候選碼中,而R的屬性一定不會出現在候選碼中
此外還要判斷LR+N
2、求最小依賴函數集
最小依賴集滿足的三個條件
① F中的任何一個函數依賴的右部僅含有一個屬性(右部單屬性)
② F中不存在這樣一個函數依賴X→A,使得F與F-{X→A}等價(不存在冗余函數依賴)
③ F中不存在這樣一個函數依賴X→A,X有真子集Z使得F-{X→A}∪{Z→A}與F等價(不存在冗余決定屬性)
求最小依賴函數集過程
- 將所有依賴的右部划分為單屬性
- 順序檢測每一個依賴判斷其是否冗余
- 判斷依賴的左部是否有多余屬性
3、保持函數依賴分解為3NF
- 求最小函數依賴集
- 看是否包含所有屬性
- 相同左部合並
4、保持函數依賴和無損連接性分解為3NF
- 先分解為保持函數依賴的3NF
- 查看是否包含候選碼,不包含加上
5、保持無損連接分解為BCNF
- 先求出關系模式的候選鍵
- 找出一個左邊屬性集不包含候選鍵的函數依賴
- 將這個函數依賴從F中分離
- 重復第2條
6、判斷分解后的關系模式是否保存無損連接性
畫表格