數據庫系統概論考試需知
一、分值分布
1、判斷題(10分) ??? 1分一個
2、填空題(20分) ??? 2分一個
3、選擇題(20分) ??? 2分一個
4、分析題(30分) ??? 第一題10分,第二題20分
5、綜合題(20分)
二、考試范圍:
1、計科1-4班:
1、2、3、4、5、6、7、10、11章出題;
其中6.2.7多值依賴、6.2.8 4NF不考、第6章不考證明題、標※不考;
2、計科5-8班:
添加重點:2.4關系代數、6.2.3范式、7數據庫設計、11.2封鎖;
3、信安專業:
1、4、5、6、10、11章考選擇題,填空題,判斷題 ;
2、3、7章考大題(關系代數、SQL、概念和邏輯設計);
4、大數據專業:
判斷題:1、2、4、5、6、7、10、11章;
填空題:1、4、5、7、10、11章;
選擇題:1、2、4、5、6、7、10、11章;
分析題:2.4(關系代數)、3(SQL語句);
綜合題:7(數據庫設計);
第一章 緒論
一、數據庫系統概述
1、數據庫的4個基本概念
(1)數據(Data):
- 數據是數據庫中存儲的基本對象;
- 描述事物的符號記錄稱為數據;
- 數據的定義稱為數據的語義,數據與其語義是不可分的。
(2)數據庫(DataBase):
- 數據庫是長期儲存在計算機內、有組織的、可共享的大量數據的集合;
- 數據庫中的數據按一定的數據模型組織、描述和儲存,具有較小的冗余度、較高的數據獨立性和易擴展性,并可為各種用戶共享。
(3)數據庫管理系統(DataBase Management System):
- 數據庫管理系統是計算機的基礎軟件;
- 數據庫的主要功能:
- 數據定義功能;
- 數據組織、存儲和管理;
- 數據操縱功能;
- 數據庫的事務管理和運行管理;
- 數據庫的建立和維護功能;
- 其他功能(如DBMS與網絡中其它軟件系統的通信功能等)。
(4)數據庫系統(DataBase System):
?????? 數據庫系統是由數據庫、數據庫管理系統(及其應用開發工具)、應用程序和數據庫管理員組成的存儲、管理、處理和維護數據的功能。
2、數據管理技術的產生和發展
- 人工管理階段;
- 文件系統階段;
- 數據庫系統階段(從文件系統到數據庫系統標志著數據管理技術的飛躍)。
3、數據庫系統的特點
(1)數據結構化:
- 數據庫系統實現整體數據的結構化,是數據的主要特征之一,也是數據庫系統與文件系統的本質區別;
- 整體結構化是指數據庫中的數據不再僅針對某一個應用,而是面向整個組織或企業;不僅數據內部是結構化的,而且整體是結構化的,數據之間是具有聯系的。
(2)數據的共享性高、冗余度低且易擴充:
- 數據共享可以大大減少數據冗余,節約存儲空間。數據共享還能夠避免數據之間的不相容性與不一致性;
- 數據面向整個系統,是具有結構的數據,可被多個應用共享使用,也容易增加新的應用。這使得數據庫系統彈性大,易于擴充。
(3)數據獨立性高:
- 物理獨立性(用戶的應用程序與數據庫中數據的物理存儲相互獨立);
- 邏輯獨立性(用戶的應用程序與數據庫的邏輯結構相互獨立)。
(4)數據由數據庫管理系統來統一管理和控制:
- 數據的安全性保護(保護數據以防止不合法使用造成的數據泄密和破壞);
- 數據的完整性檢查(數據的正確性,有效性和相容性);
- 并發控制;
- 數據庫恢復;
# 總結:
數據庫是長期儲存在計算機內、有組織的、可共享的大量數據的集合。它可以供各種用戶共享,具有最小冗余度和較高的數據獨立性。數據庫管理系統在數據庫建立、運用和維護是對數據庫進行統一控制,以保證數據的完整性和安全性,并在多用戶同時使用數據庫時進行并發控制,在發生故障后對數據庫進行恢復。數據庫系統的出現使信息系統從以加工數據的程序為中心轉向圍繞共享的數據庫為中心的新階段。
二、數據模型
1、概念
?????? 數據模型是對現實世界數據特征的抽象,是數據庫系統的核心和基礎。
2、兩類數據模型
(1)概念模型;
(2)邏輯模型和物理模型;
3、概念模型
(1)信息實際中的基本概念:
實體:客觀存在并可相互區別的事物稱為實體。
屬性:實體所具有的某一特性稱為屬性。
碼:唯一標識實體的屬性集稱為碼。
實體型:用實體名及其屬性名集合來抽象和刻畫同類實體,稱為實體型。
實體集:同一類型實體的集合稱為實體集。
聯系:實體之間的聯系通常是指不同實體集之間的聯系。實體之間的聯系有一對一、一對多和多對多等多種類型。
(2)概念模型的一種表示方法:
????????實體-聯系方法(Entity-Relationship approach)。該方法用E-R圖(E-R diagram)來描述現實世界的概念模型,E-R方法也稱為E-R模型。
4、數據模型的組成要素
(1)數據結構:
????????數據結構描述數據庫的組成對象以及對象之間的聯系。
(2)數據操作:
????????數據操作是指對數據庫中各種對象(型)的實例(值)允許執行的操作的集合,包括操作及有關的操作規則。
(3)數據的完整性約束條件:
????????數據的完整性約束條件是一組完整性規則。
5、常用的數據模型
- 層次模型(hierarchical model);
- 網狀模型(network model);
- 關系模型(relational model);
- 面向對象數據模型(object oriented data model).;
- 對象關系數據模型(object relational data model);
- 半結構化數據模型(semi structure data model);
#層次模型和網狀模型統稱為格式化模型。
#所謂基本層次聯系是指兩個記錄以及它們之間的一對多(包括一對一)的聯系:
?
????????圖中R位于聯系L的始點,稱為雙親結點,R位于聯系L,的終點,稱為子女結點。
6、層次模型
(1)定義:
????????在數據庫中定義滿足下面兩個條件的基本層次聯系的集合為層次模型:
有且只有一個結點沒有雙親結點,這個結點稱為根結點;
根以外的其他結點有且只有一個雙親結點。
????????在層次模型中,每個結點表示一個記錄類型,記錄類型之間的聯系用結點之間的線(有向邊)表示,這種聯系是父子之間的一對多的聯系。這就使得層次數據庫系統只能處理一對多的實體聯系。
?
????????層次模型像一棵倒立的樹,結點的雙親是唯一的。
(2)優點:
- 層次模型的數據結構比較簡單清晰。
- 層次數據庫的查詢效率高。
- 層次數據模型提供了良好的完整性支持。
(3)缺點:
- 現實世界中很多聯系是非層次性的,如多對多聯系,不適合用層次模型表示。
- 如果一個結點具有多個雙親結點等,用層次模型表示這類聯系就很笨拙,只能通過引入冗余數據(易產生不一致性)或創建非自然的數據結構(引入虛擬結點)來解決。對插入和刪除操作的限制比較多,因此應用程序的編寫比較復雜。
- 查詢子女結點必須通過雙親結點。
- 由于結構嚴密,層次命令趨于程序化。
7、網狀模型:
(1)典型代表系統:DBTG系統,亦稱CODASYL系統。
(2)定義:在數據庫中,把滿足以下兩個條件的基本層次聯系集合稱為網狀模型:
- 允許一個以上的結點無雙親;
- 一個結點可以有多于一個的雙親。
從定義可以看出,層次模型中子女結點與雙親結點的聯系是唯一的,而在網狀模型中這種聯系可以不唯一(下圖為網狀模型的例子)。
?
(3)優點:
- 能夠更為直接地描述現實世界,如一個結點可以有多個雙親,結點之間可以有多種聯系。
- 具有良好的性能,存取效率較高。
(4)缺點:
- 結構比較復雜,而且隨著應用環境的擴大,數據庫的結構就變得越來越復雜,不利于最終用戶掌握。
- 網狀模型的DDL、DML復雜,并且要嵌入某一種高級語言(如COBOL、C)中。用戶不容易掌握,不容易使用。
- 由于記錄之間的聯系是通過存取路徑實現的,應用程序在訪問數據時必須選擇適當的存取路徑,因此用戶必須了解系統結構的細節,加重了編寫應用程序的負擔。
8、關系模型:
(1)關系模型的數據結構
關系:一個關系對應通常說的一張表。
元組:表中的一行即為一個元組。
屬性:表中的一列即為一個屬性,給每一個屬性起一個名稱即屬性名
碼:也稱為碼鍵。表中的某個屬性組,可以唯一確定一個元組,也就成為本關系的碼。
域:域是一組具有相同數據類型的值的集合,屬性的取值范圍來自某個域。
分量:元組中的一個屬性值。
關系模式:對關系的描述,一般表示為:關系名(屬性1,屬性2,……,屬性n)。
?????? # 關系模型要求關系必須是規范化的,關系的每一個分量必須是不可分的數據項。
?
(2)關系模型的數據操縱與完整性約束
關系模型的數據操縱主要包括查詢、插入、刪除和更新數據。這些操作必須滿足關系的完整性約束條件。關系的完整性約束條件包括三大類:實體完整性、參照完整性和用戶定義的完整性。
# 操作對象和操作結果都是關系,關系模型把存取路徑向用戶隱蔽起來,用戶只要指出“干什么”或“找什么”,不必詳細說明“怎么干”或“怎么找”。
(3)優點
- 關系模型與格式化模型不同,它是建立在嚴格的數學概念的基礎上的。
- 關系模型的概念單一。無論實體還是實體之間的聯系都用關系來表示。對數據的檢索和更新結果也是關系(即表)。所以其數據結構簡單、清晰,用戶易懂易用。
- 關系模型的存取路徑對用戶透明,從而具有更高的數據獨立性、更好的安全保密性,也簡化了程序員的工作和數據庫開發建立的工作。
(4)缺點
- 由于存取路徑對用戶是隱蔽的,查詢效率往往不如格式化數據模型。
- 為了提高性能,數據庫管理系統必須對用戶的查詢請求進行優化,因此增加了開發數據庫管理系統的難度。
三、數據庫系統的結構
1、數據庫系統模式的概念
????????在數據模型中有“型”(type)和“值”(value)的概念。型是指對某一類數據的結構和屬性的說明,值是型的一個具體賦值。
????????模式(schema)是數據庫中全體數據的邏輯結構和特征的描述,它僅僅涉及型的描述不涉及具體的值。模式的一個具體值稱為模式的一個實例(instance)。模式是相對穩定的,而實例是相對變動的。
2、數據庫系統的三級模式結構
?
- 模式(schema):模式也稱邏輯模式,是數據庫中全體數據的邏輯結構和特征的描述,是所有用戶的公共數據視圖。
- 外模式(external schema):也稱子模式(subschema)或用戶模式,它是數據庫用戶(包括應用程序員和最終用戶)能夠看見和使用的局部數據的邏輯結構和特征的描述,是數據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示。
- 內模式(internal schema):也稱存儲模式(storage schema),一個數據庫只有一個內模式。它是數據物理結構和存儲方式的描述,是數據在數據庫內部的組織方式。
# 數據庫系統的三級結構的優點:
????????數據庫系統的三級模式是對數據的三個抽象級別,它把數據的具體組織留給DBMS管理,使用戶能邏輯抽象地處理數據,而不必關心數據在計算機中的表示和存儲。為了能夠在內部實現這三個抽象層次的聯系和轉換,數據庫系統在這三級模式之間提供了兩層映像:外模式/模式映像和模式/內模式映像。正是這兩層映像保證了數據庫系統中的數據能夠具有較高的邏輯獨立性和物理獨立性。
3、數據庫的二級映像功能和數據獨立性
- 外模式/模式映像:當模式改變時(例如增加新的關系、新的屬性、改變屬性的數據類型等),由數據庫管理員對各個外模式/模式的映像作相應改變,可以使外模式保持不變。應用程序是依據數據的外模式編寫的,從而應用程序不必修改,保證了數據與程序的邏輯獨立性,簡稱數據的邏輯獨立性。
- 模式/內模式映像:當數據庫的存儲結構改變時(例如選用了另一種存儲結構),由數據庫管理員對模式/內模式映像作相應改變,可以使模式保持不變,從而應用程序也不必改變。保證了數據與程序的物理獨立性,簡稱數據的物理獨立性。
# 數據與程序之間的獨立性使得數據的定義和描述可以從應用程序中分離出去。另外,由于數據的存取由數據庫管理系統管理,從而簡化了應用程序的編制,大大減少了應用程序的維護和修改。
四、數據庫系統的組成
????????數據庫系統一般由數據庫、數據庫管理系統(及其應用開發工具)、應用程序和數據庫管理員構成。
# 數據庫管理員的職責:
- 決定數據庫中的信息內容和結構;
- 決定數據庫的存儲結構和存取策略;
- 定義數據的安全性要求和完整性約束條件;
- 監控數據庫的使用和運行;
- 數據庫的改進和重組、重構。
第二章 關系數據庫
一、關系數據結構及形式化定義
1、關系
????????關系模型是建立在集合代數的基礎上的,這里從集合論角度給出關系數據結構的形式化定義。
- 域:域是一組具有相同數據類型的值的集合。
- 笛卡爾積:給定一組域D1、D2、…、Dn,允許其中某些域是相同的,D1、D2、…、Dn的笛卡兒積為D1×D2×…×Dn={(d1、d2、 …、dn)|d,∈Di,i=1、2、…、n},其中,每一個元素(d1、d2、…、dn)叫作一個n元組,或簡稱元組。元素中的每個值di叫做一個分量。一個域允許的不同取值個數稱為這個域的基數。若Di(i=1,2,…,n)為有限集,其基數為mi(i=1、2、…、n),則D1×D2×…×Dn的基數M為:
?
- 笛卡兒積可表示為一張二維表。表中的每行對應一個元組,表中的每一列的值來自一個域。
- 關系:D1×D2×…×Dn的子集叫做在域D1、D2、…、Dn上的關系,表示為R(D1、D2、…、Dn),R表示關系的名字,n是關系的目或度(n元關系)。若關系中的某一屬性組的值能唯一地標識一個元組,而其子集不能,則稱該屬性組為候選碼。若一個關系有多個候選碼,則選定其中一個為主碼、候選碼的諸屬性稱為主屬性。不包含在任何候選碼中的屬性稱為非主屬性或非碼屬性。在最簡單的情況下,候選碼只包含一個屬性。在最極端的情況下,關系模式的所有屬性是這個關系模式的候選碼,稱為全碼。關系可以有三種類型:基本關系(通常又稱為基本表或基表)、查詢表和視圖表。
- # 基本關系的性質:
- 列是同質的;
- 不同的列可出自同一個域;
- 列的次序可以任意交換;
- 任意兩個元組的候選碼不能取相同的值;
- 行的次序可以任意交換;
- 分量必須取原子值,即每一個分量都必須是不可分的數據項。
- # 規范化的關系簡稱為范式(Normal Form,NF)。
2、關系模式
關系的描述稱為關系模式。它可以形式化地表示為R(U,D,DOM,F),其中R為關系名,U為組成該關系的屬性名集合,D為U中屬性所來自的域,DOM為屬性向域的映像集合,F為屬性間數據的依賴關系集合。
關系模式通常可以簡記為R(U)或R(A1,A2,…,An),其中R為關系名,A1,A2,…,An為屬性名,而域名及屬性向域的映像常常直接說明為屬性的類型、長度。
3、關系數據庫
關系數據庫也有型和值之分。關系數據庫的型也稱為關系數據庫模式,是對關系數據庫的描述。關系數據庫模式包括若干域的定義,以及在這些域上定義的若干關系模式。關系數據庫的值是這些關系模式在某一時刻對應的關系的集合,通常就稱為關系數據庫。
二、基本的關系操作
?????? 常用的關系操作包括:查詢操作和插入、刪除、修改操作兩大部分。
?????? # 查詢操作包括:選擇、投影、連接、除、并、差、交、笛卡爾積等(標“_”的為基本操作)。
三、關系數據語言的分類
# 關系數據語言的特點:
語言具有完備的表達能力,是非過程化的集合操作語言,功能強,能夠嵌入高級語言中使用。
四、關系的完整性
1、實體完整性
????????若屬性(指一個或一組屬性)A是基本關系R的主屬性,則A不能取空值。所謂空值就是“不知道”或“不存在”或“無意義”的值。
2、參照完整性
(1)參照關系:
????????設F是基本關系R的一個或一組屬性,但不是關系R的碼,K是基本關系S的主碼。如果F與K,相對應,則稱F是R的外碼,并稱基本關系R為參照關系,基本關系S為被參照關系或目標關系。關系R和S不一定是不同的關系。
(2)定義:
????????若屬性(或屬性組)F是基本關系R的外碼,它與基本關系S的主碼K,相對應(基本關系R和S不一定是不同的關系),則對于R中每個元組在F上的值必須取空值(F的每個屬性值均為空值),或者等于S中某個元組的主碼值。
(3)用戶定義的完整性
????????針對某一具體關系數據庫的約束條件,它反映某一具體應用所涉及的數據必須滿足的語義要求。
五、關系代數
1、運算符
2、傳統的集合運算
3、專門的關系運算
(1)選擇:
(2)投影:
(3)連接:
(4)除運算:
4、練習:

第三章 關系數據庫標準語言SQL
一、SQL的特點(SQL→結構化查詢語言)
- 綜合統一。SQL語言集數據定義語言DDL、數據操縱語言DML、數據控制語言DCL的功能于一體;
- 高度非過程化。用SQL語言進行數據操作,只要提出“做什么”,而無需指明“怎么做”,因此無需了解存取路徑,存取路徑的選擇以及SQL語句的操作過程由系統自動完成;
- 面向集合的操作方式。SQL語言采用集合操作方式,不僅操作對象、查找結果可以是元組的集合,而且一次插入、刪除、更新操作的對象也可以是元組的集合;
- 以同一種語法結構提供兩種使用方式。SQL語言既是自含式語言,又是嵌入式語言。作為自含式語言,它能夠獨立地用于聯機交互的使用方式;作為嵌入式語言,它能夠嵌入到高級語言程序中,供程序員設計程序時使用;
- 語言簡捷,易學易用。
二、數據定義
三、數據查詢
1、一般格式
SELECT[ALL | DISTINCT]<目標列表達式>[,<目標列表達式>]…
FROM<表名或視圖名>[,<表名或視圖名>…]I(<SELECT語句>)[AS]<別名>
[WHERE<條件表達式>]
[GROUP BY<列名1>[HAVING<條件表達式>]]
[ORDER BY<列名2>[ASC|DESC]];
2、常用的查詢條件
# 字符匹配:
(1)%(百分號)代表任意長度(長度可以為0)的字符串。例如a%b表示以a開頭,以b結尾的任意長度的字符串。如acb、addgb、ab等都滿足該匹配串。
(2)_(下橫線)代表任意單個字符。例如ab表示以a開頭,以b結尾的長度為3的任意字符串。如acb、afb等都滿足該匹配串。
3、聚集函數
# 當聚集函數遇到空值時,除COUNT(*)外,都跳過空值而只處理非空值。
# WHERE子句中是不能用聚集函數作為條件表達式的。聚集函數只能用于SELECT子句和GROUP BY中的HAVING子句。
4、連接查詢
(1)等值與非等值連接查詢:
?
# 關系數據庫管理系統執行連接操作的示意圖:
?
?
(2)自身連接:
?
?
(3)外連接:
?
(4)多表連接:
?
5、嵌套查詢
?
# 帶有EXISTS謂詞的子查詢
- 使用存在量詞EXISTS后,若內層查詢結果非空,則外層的WHERE子句返回真值,否則返回假值。
- 使用存在量詞NOT EXISTS后,若內層查詢結果為空,則外層的WHERE子句返回真值,否則返回假值。
6、集合查詢
????????SELECT語句的查詢結果是元組的集合,所以多個SELECT語句的結果可進行集合操作。集合操作主要包括并操作UNION、交操作INTERSECT和差操作EXCEPT。
# 參加集合操作的各查詢結果的列數必須相同;對應項的數據類型也必須相同。
7、基于派生表的查詢
????????子查詢不僅可以出現在WHERE子句中,還可以出現在FROM子句中,這時子查詢生成的臨時派生表成為主查詢的查詢對象。
8、SELECT語句總結
?
?
四、數據更新
1、插入數據
(1)插入元組:
?
(2)插入子查詢結果:
INSERT
INTO<表名>[(<屬性列1>[,,<屬性列2>…])
子查詢;
2、修改數據
?
?
3、刪除數據
?
?
五、空值的處理
1、產生
- 插入數據設為”null”;
- 外連接;
- 空值的關系運算;
2、判斷
????????判斷一個屬性的值是否為空值,用IS NULL或IS NOT NULL來表示。
3、約束條件
????????屬性定義(或者域定義)中有NOT NULL約束條件的不能取空值,加了UNIQUE限制的屬性不能取空值,碼屬性不能取空值。
4、算術、比較和邏輯運算
???????空值與另一個值(包括另一個空值)的算術運算的結果為空值,空值與另一個值(包括另一個空值)的比較運算的結果為UNKNOWN。有了UNKNOWN后,傳統的邏輯運算中二值(TRUE,FALSE)邏輯就擴展成了三值邏輯。
????????在查詢語句中,只有使WHERE和HAVING子句中的選擇條件為TRUE的元組才被選出作為輸出結果。
六、視圖
1、定義視圖
????????SQL語言用CREATE VIEW命令建立視圖,其一般格式為
CREATE VIEW<視圖名>[(<列名>[,<列名>])]AS<子查詢>[WITH CHECK OPTION]:
????????WITH CHECK OPTION表示對視圖進行UPDATE、INSERT和DELETE操作時要保證更新、插入或刪除的行滿足視圖定義中的謂詞條件(即子查詢中的條件表達式)。
# 執行CREATE VIEW語句后只是把視圖的定義存入數據字典,不執行其中的SELECT語句。
2、刪除視圖
?????? 該語句的格式為
DROP VIEW<視圖名>[CASCADE];
????????視圖刪除后視圖的定義將從數據字典中刪除。如果該視圖上還導出了其他視圖,則使用CASCADE級聯刪除語句把該視圖和由它導出的所有視圖一起刪除。
????????基本表刪除后,由該基本表導出的所有視圖均無法使用了,但是視圖的定義沒有從字典中清除。刪除這些視圖定義需要顯式地使用DROP VIEW語句。
3、查詢視圖
????????視圖定義后,用戶就可以像對基本表一樣對視圖進行查詢了。
4、更新視圖
????????更新視圖是指通過視圖來插入、刪除和修改數據。
????????由于視圖是不實際存儲數據的虛表,因此對視圖的更新最終要轉換為對基本表的更新。像查詢視圖那樣,對視圖的更新操作也是通過視圖消解,轉換為對基本表的更新操作。
????????為防止用戶通過視圖對數據進行增加、刪除、修改時,有意無意地對不屬于視圖范圍內的基本表數據進行操作,可在定義視圖時加上WITH CHECK OPTION子句。這樣在視圖上增、刪、改數據時,關系數據庫管理系統會檢查視圖定義中的條件,若不滿足條件則拒絕執行該操作。
5、視圖的作用
- 視圖能夠簡化用戶的操作;
- 視圖使用戶能以多種角度看待同一數據;
- 視圖對重構數據庫提供了一定程度的邏輯獨立性;
- 視圖能夠對機密數據提供安全保護;
- 適當利用視圖可以更清晰地表達查詢。
第四章 數據庫安全性
一、數據庫安全性概述
數據庫的安全性是指保護數據庫以防止不合法使用所造成的數據泄露、更改或破壞。
二、數據庫安全性控制
1、常用方法和技術
- 用戶標識和鑒別:該方法由系統提供一定的方式讓用戶標識自己的名字或身份。每次用戶要求進入系統時,由系統進行核對,通過鑒定后才提供系統的使用權。
- 存取控制:通過用戶權限定義和合法權檢查確保只有合法權限的用戶訪問數據庫,所有未被授權的人員無法存取數據。例如CZ級中的自主存取控制(DAC),BI級中的強制存取控制(MAC).
- 視圖機制:為不同的用戶定義視圖,通過視圖機制把要保密的數據對無權存取的用戶隱藏起來,從而自動地對數據提供一定程度的安全保護。
- 審計:建立審計日志,把用戶對數據庫的所有操作自動記錄下來放入審計日志中,DBA可以利用審計跟蹤的信總,重現導致數據庫現有狀況的一系列事件,找出非法存取數據的人、時間和內容等。
- 數據加密:對存儲和傳輸的數據進行加密處理,從而使得不知道解密算法的人無法獲知數據的內容。
# 數據庫中的自主存取控制方法和強制存取控制方法:
- 自主存取控制方法:定義各個用戶對不同數據對象的存取權限。當用戶對數據庫訪問時首先檢查用戶的存取權限。防止不合法用戶對數據庫的存取。
- 強制存取控制方法:每一個數據對象被(強制地)標以一定的密級,每一個用戶也被(強制地)授予某個級別的許可證。系統規定只有具有某一許可證級別的用戶才能存取某一個密級的數據對象。
2、授權:授予與收回
(1)GRANT:
????????GRANT語句的一般格式為
GRANT<權限>[,<權限>]…
ON<對象類型><對象名>[,<對象類型><對象名>]…
TO<用戶>[,<用戶>]…
[WITH GRANT OPTION];
????????如果指定了WITH GRANT OPTION子句,則獲得某種權限的用戶還可以把這種權限再授予其他的用戶。如果沒有指定WITH GRANT OPTION子句,則獲得某種權限的用戶只能使用該權限,不能傳播該權限。
????????SQL標準允許具有WITH GRANT OPTION的用戶把相應權限或其子集傳遞授予其他用戶,但不允許循環授權,即被授權者不能把權限再授回給授權者或其祖先。
(2)REVOKE:
????????REVOKE語句的一般格式為
REVOKE<權限>[<權限>]…
ON<對象類型><對象名>[,<對象類型><對象名>]…
FROM<用戶>[<用戶>]…[CASCADE|RESTRICT];
3、創建數據庫模式的權限
CREATE USER語句一般格式如下:
CREATE USER <username>[WITH][DBA|RESOURCE|CONNECT];
# 權限與可執行的操作對照表:
?
4、數據庫角色
(1)角色的創建:
創建角色的SQL語句格式是
CREATE ROLE<角色名>
(2)角色授權:
GRANT<權限>[,<權限>]·ON<對象類型>對象名T0<角色>[,<角色>]…
????????數據庫管理員和用戶可以利用GRANT語句將權限授予某一個或幾個角色。
(3)將一個角色授予其他的角色或用戶:
GRANT<角色1>[,<角色2>]...T0<角色3>[,<用戶1>]…[WITH ADMIN OPTION]
????????該語句把角色授予某用戶,或授予另一個角色。這樣,一個角色(例如角色3)所擁有的權限就是授予它的全部角色(例如角色1和角色2)所包含的權限的總和。
????????授予者或者是角色的創建者,或者擁有在這個角色上的ADMIN OPTION.
????????如果指定了WITH ADMIN OPTION子句,則獲得某種權限的角色或用戶還可以把這種權限再授予其他的角色。
一個角色包含的權限包括直接授予這個角色的全部權限加上其他角色授予這個角色的全部權限。
(4)角色權限的收回
REVOKE<權限>[,<權限>]…ON<對象類型><對象名>FROM<角色>[<角色>]…
????????用戶可以收回角色的權限,從而修改角色擁有的權限。
????????REVOKE動作的執行者或者是角色的創建者,或者擁有在這個(些)角色上的ADMNOPTION。
5、審計(什么是數據庫的審計功能/為什么要提供審計功能)
????????審計功能是指DBMS的審計模塊在用戶對數據庫執行操作的同時把所有操作自動記錄到系統的審計日志中。任何系統的安全保護措施都不是完美無缺的,蓄意盜竊破壞數據的人總可能存在。利用數據庫的審計功能,DBA可以根據審計跟蹤的信息,重現導致數據庫現有狀況的一系列事件,找出非法存取數據的人、時間和內容等。
第五章 數據庫完整性
一、定義
????????數據庫的完整性是指數據的正確性和相容性。
二、實體完整性
1、定義實體完整性
????????關系模型的實體完整性在CREATE TABLE中用PRIMARY KEY定義。
2、實體完整性檢查和違約處理
- 檢查主碼值是否唯一,如果不唯一則拒絕插入或修改。
- 檢查主碼的各個屬性是否為空,只要有一個為空就拒絕插入或修改。
三、參照完整性
1、定義參照完整性
?????? 關系模型的參照完整性在CREATE TABLE中用FOREIGN KEY短語定義哪些列為外碼,用REFERENCES短語指明這些外碼參照哪些表的主碼。
2、參照完整性檢查和違約處理
?
四、用戶定義的完整性
1、屬性上的約束條件
?????? 在CREATE TABLE中定義屬性的同時,可以根據應用要求定義屬性上的約束條件,即屬性值限制,包括:
- 列值非空(NOT NULL);
- 列值唯一(UNIQUE);
- 檢查列值是否滿足一個條件表達式(CHECK短語)。
2、屬性上約束條件的檢查和違約處理
????????當往表中插入元組或修改屬性的值時,關系數據庫管理系統將檢查屬性上的約束條件是否被滿足,如果不滿足則操作被拒絕執行。
3、元組上的約束條件
????????與屬性上約束條件的定義類似,在CREATE TABLE語句中可以用CHECK短語定義元組上的約束條件,即元組級的限制。同屬性值限制相比,元組級的限制可以設置不同屬性之間的取值的相互約束條件。
4、元組上約束條件的檢查和違約處理
????????當往表中插入元組或修改屬性的值時,關系數據庫管理系統將檢查元組上的約束條件是否被滿足,如果不滿足則操作被拒絕執行。
五、完整性約束命名子句
1、完整性約束命名子句
CONSTRAINT<完整性約束條件名><完整性約束條件>
????????<完整性約束條件>包括NOT NULL、UNIQUE、PRIMARY KEY、FOREIGN KEY、CHECK短語等。
2、修改表中的完整性限制
????????可以使用ALTER TABLE語句修改表中的完整性限制。
六、斷言
1、創建斷言的語句格式
CREATE ASSERTION<斷言名><CHECK子句>
????????每個斷言都被賦予一個名字,<CHECK子句>中的約束條件與WHERE子句的條件表達式類似。斷言創建以后,任何對斷言中所涉及關系的操作都會觸發關系數據庫管理系統對斷言的檢查,任何使斷言不為真值的操作都會被拒絕執行。
2、刪除斷言的語句格式
DROP ASSERTION<斷言名>;
七、觸發器
????????觸發器是用戶定義在關系表上的一類由事件驅動的特殊過程。
1、定義觸發器
????????觸發器又叫做事件-條件-動作(event-condition-.action)規則。當特定的系統事件(如對一個表的增、刪、改操作,事務的結束等)發生時,對規則的條件進行檢查,如果條件成立則執行規則中的動作,否則不執行該動作。規則中的動作體可以很復雜,可以涉及其他表和其他數據庫對象,通常是一段SQL存儲過程。
CREATE TRIGGER<觸發器名>/*每當觸發事件發生時,該觸發器被激活*/(BEFORE|AFTER}<觸發事件>ON<表名>/*指明觸發器激活的時間是在執行觸發事件前或后*/REFERENCING NEWJOLD ROW AS<變量>/*REFERENCING指出引用的變量*/FOR EACH(ROW STATEMENT)/*體定義觸發器的類型,指明動作體執行的頻率*/WHEN<觸發條件>]<觸發動作體>/*僅當觸發條件為真時才執行觸發動作體*/
# 詳細說明:
- 只有表的擁有者,即創建表的用戶才可以在表上創建觸發器,并且一個表上只能創建一定數量的觸發器。觸發器的具體數量由具體的關系數據庫管理系統在設計時確定。
- 觸發器名可以包含模式名,也可以不包含模式名。同一模式下,觸發器名必須是唯的,并且觸發器名和表名必須在同一模式下。
- 觸發器只能定義在基本表上,不能定義在視圖上。當基本表的數據發生變化時,將激活定義在該表上相應觸發事件的觸發器,因此該表也稱為觸發器的目標表。
- 觸發事件可以是NSERT、DELETE或UPDATE,也可以是這幾個事件的組合,如INSERT OR DELETE等,還可以是UPDATE OF<觸發列,>,即進一步指明修改哪些列時激活觸發器。AFTER/BEFORE是觸發的時機。AFTER表示在觸發事件的操作執行之后激活觸發器;BEFORE表示在觸發事件的操作執行之前激活觸發器。
- 觸發器按照所觸發動作的間隔尺寸可以分為行級觸發器(FOR EACH ROW)和語句級觸發器(FOR EACH STATEMENT)。
- 觸發器被激活時,只有當觸發條件為真時觸發動作體才執行,否則觸發動作體不執行。如果省略WHEN觸發條件,則觸發動作體在觸發器激活后立即執行。
- 觸發動作體既可以是一個匿名PL/SQL過程塊,也可以是對已創建存儲過程的調用。如果是行級觸發器,用戶可以在過程體中使用NEW和OLD引用UPDATE/NSERT事件之后的新值和UPDATE/DELETE事件之前的舊值;如果是語句級觸發器,則不能在觸發動作體中使用NEW或OLD進行引用。如果觸發動作體執行失敗,激活觸發器的事件(即對數據庫的增、刪、改操作)就會終止執行,觸發器的目標表或觸發器可能影響的其他對象不發生任何變化。
2、激活觸發器
????????觸發器的執行是由觸發事件激活,并由數據庫服務器自動執行的。一個數據表上可能定義了多個觸發器,如多個BEFORE觸發器、多個AFTER觸發器等,同一個表上的多個觸發器激活時遵循如下的執行順序:
- 執行該表上的BEFORE觸發器
- 激活觸發器的SQL語句。
- 執行該表上的AFTER觸發器。
????????對于同一個表上的多個BEFORE(AFTER)觸發器,遵循“誰先創建誰先執行”的原則,即按照觸發器創建的時間先后順序執行。有些關系數據庫管理系統是按照觸發器名稱的字母排序順序執行觸發器。
3、刪除觸發器
????????刪除觸發器的SQL語法如下:
DROP TRIGGER<觸發器名>ON<表名>;
????????觸發器必須是一個已經創建的觸發器,并且只能由具有相應權限的用戶刪除。
第六章 關系數據理論——規范化
一、函數依賴
????????設R(U)是屬性集U上的關系模式,X、Y是U的子集。若對于R(U)的任意一個可能的關系r,r中不可能存在兩個元組在X上的屬性值相等,而在Y上的屬性值不等,則稱X函數確定Y或Y函數依賴于X,記作X→Y。其中,若有X→Y,但Y不包含于X,則稱非平凡的函數依賴;若有X→Y,但Y包含于X,則稱平凡的函數依賴;若有X→Y,Y→X,則記作X← →Y。
# 完全函數依賴與部分函數依賴
?
二、碼
?
三、范式
?
- 1NF:所有字段值都是不可分解的原子值。
- 2NF:不包含非主屬性對碼的部分函數依賴,一個表中只能保存一種數據,不可以把多種數據保存在同一張數據庫表中。
- 3NF:不包含非主屬性對碼的傳遞函數依賴,確保數據表中的每一列數據都和主鍵直接相關,而不能間接相關。
- BCNF:消除每一屬性對候選鍵的傳遞依賴,BCNF是修正的第三范式。
?
四、候選碼
1、概念
????????如果關系中的某一屬性組的值能唯一標識一個元組,而其子集不能,則成為該屬性組為候選碼(可以推出所有屬性)。
2、候選碼的篩選步驟
- 只出現在左邊的一定是候選碼;
- 只出現在右邊的一定不是候選碼;
- 左右都出現的不一定是候選碼;
- 左右都不出現的一定是候選碼;
- 再求確定的候選碼的閉包,如果可以推出全部,那么當前確定的就是候選碼,否則要把每一個可能的值放進當前確定的候選碼里面進行求閉包
3、示例
R<U,F>,U(A,B,C,D,E,G),F = { AB→C,CD→E,E→A,A→G ),求候選碼:
- B和D一定是候選碼;
- G一定不是候選碼;
- A、C和E不一定是候選碼;
- BD推不出任何內容,因此所以要把每一個可能的求閉包:
- (BDA)+ 可推出CEG,所以可以推出ABCDEG;
- (BDC)+ 可推出EAG,所以可以推出ABCDEG;
- (BDE)+ 可推出AGC,所以可以推出ABCDEG;
- 則候選碼最終是{(BDA),(BDC),(BDE)};
# 補充:
- 超碼:能表示出所有屬性的集合;
- 候選碼:最小的超碼;
- 主碼:從候選碼里面任意挑出一個作為主碼;
- 主屬性:包含在所有候選碼的屬性,如ABCDE;
- 非主屬性:不包含在候選碼中的屬性,如G;
- 全碼:所有的屬性都是主碼;
五、最小依賴集
?
# 如何求最小依賴集?
- 拆開右邊為多個元素的。比如A→BC拆為A→B和A→C;
- 除去當前元素,求它的閉包,把集合里面所有元素都弄完;
- 左邊最小化(通過遮住元素來看能不能推出其他元素),比如BCD,遮住B能否推出CD;遮住C能否推出BD;遮住D能否推出BC。
第七章 數據庫設計
一、數據庫設計的基本步驟
1、需求分析
????????進行數據庫設計首先必須準確了解與分析用戶需求(包括數據與處理)。
2、概念結構設計
????????概念結構設計是整個數據庫設計的關鍵,它通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體數據庫管理系統的概念模型。
3、邏輯結構設計
????????邏輯結構設計是將概念結構轉換為某個數據庫管理系統所支持的數據模型,并對其進行優化。
4、物理結構設計
????????物理結構設計是為邏輯數據模型選取一個最適合應用環境的物理結構(包括存儲結構和存取方法)。
5、數據庫實施
????????在數據庫實施階段,設計人員運用數據庫管理系統提供的數據庫語言及其宿主語言,根據邏輯設計和物理設計的結果建立數據庫,編寫與調試應用程序,組織數據入庫,并進行試運行。
6、數據庫運行和維護
????????數據庫應用系統經過試運行后即可投入正式運行。在數據庫系統運行過程中必須不斷地對其進行評估、調整與修改。
?
二、數據庫設計過程中的各級模式
?
三、E-R模型
1、三類聯系
?
# E-R圖向關系模型的轉換:
(1)1:1聯系:把關系合并到任意一個表,并且把其他表里面的主鍵放到另一個里面;
(2)1:n聯系:把A的主碼放到B里面,然后把關系的屬性放到B里面;
(3)m:n聯系:需要兩邊實體的主鍵和自身的屬性單獨作為一個關系模式。
2、E-R圖
E-R圖提供了表示實體型、屬性和聯系的方法。
- 實體型用矩形表示,矩形框內寫明實體名。
- 屬性用橢圓形表示,并用無向邊將其與相應的實體型連接起來。
- 聯系用菱形表示,菱形框內寫明聯系名,并用無向邊分別與有關實體型連接起來,同時在無向邊旁標上聯系的類型(1:1、1:n或m:n).
# 如果一個聯系具有屬性,則這些屬性也要用無向邊與該聯系連接起來。
3、示例:
?
?
解:
????????????
????????
系(系編號,系名,學校名)???????????????????????? 產品(產品號,產品名,工廠名)
班級(班級號,班級人數,系編號)????????????? 零件(零件號,零件名,供應廠商)
教研室(教研室號,教研室人數,系編號)??? 原材料(原材料號,原材料名,類別,供應商)
學生(學號,姓名,班級號,教員編號)?????? 倉庫(倉庫號,倉庫名,倉庫位置)
教員(教員編號,姓名,職位,教研室號)??? 產品組成(產品號,零件號,零件用量)
課程(課程號,課程名,學分)???????????????????? 零件組成(零件號,原材料號,原材料用量)
研究生(研究生號,姓名,教員編號)?????????? 零件儲存(零件號,倉庫號,儲存量)
選修(學號,課程號,成績)???????????????????????? 原材料存放(原材料類別,倉庫號,存放量)
第十章 數據庫恢復技術
一、事務的基本概念
1、事務
?????? 所謂事務是用戶定義的一個數據庫操作序列,這些操作要么全做,要么全不做,是一個不可分割的工作單位。
?????? COMMIT表示提交事務的所有操作,ROLLBACK表示回滾撤銷事務對數據庫的所有已完成的操作。
2、事務的ACID特性
- 原子性(Atomicity);
- 一致性(Consistency);
- 隔離性(Isolation);
- 持續性(Durability)。
二、故障的種類
- 事務內部的故障;
- 系統故障;
- 介質故障;
- 計算機病毒;
三、恢復的實現技術
?????? 恢復的基本原理:冗余。
- 數據轉儲;
- 登記日志文件;
四、恢復策略
1、事務故障恢復
- 反向掃描日志文件(即從最后向前掃描日志文件),查找該事務的更新操作;
- 對該事務的更新操作執行逆操作,即將日志記錄中“更新前的值”寫入數據庫。這樣,如果記錄中是插入操作,則相當于做刪除操作(因此時“更新前的值”為空):若記錄中是刪除操作,則做插入操作;若是修改操作,則相當于用修改前值代替修改后值;
- 繼續反向掃描日志文件,查找該事務的其他更新操作,并做同樣處理;
- 如此處理下去,直至讀到此事務的開始標記,事務故障恢復就完成了。
2、系統故障恢復
- 正向掃描日志文件(即從頭掃描日志文件),找出在故障發生前已經提交的事務(這些事務既有BEGIN TRANSACTION記錄,也有COMMIT記錄),將其事務標識記入重做隊列(REDO-LIST)。同時找出故障發生時尚未完成的事務(這些事務只有BEGN TRANSACTION記錄,無相應的COMMIT記錄),將其事務標識記入撤銷隊列(UNDO-LIST).
- 對撤銷隊列中的各個事務進行撤銷(UNDO)處理。進行撤銷處理的方法是,反向掃描日志文件,對每個撒銷事務的更新操作執行逆操作,即將日志記錄中“更新前的值”寫入數據庫。
- 對重做隊列中的各個事務進行重做處理。進行重做處理的方法是:正向掃描日志文件,對每個重做事務重新執行日志文件登記的操作,即將日志記錄中“更新后的值”寫入數據庫。
3、介質故障的恢復
- 裝入最新的數據庫后備副本(離故障發生時刻最近的轉儲副本),使數據庫恢復到最近一次轉儲時的一致性狀態。對于動態轉儲的數據庫副本,還需同時裝入轉儲開始時刻的日志文件副本,利用恢復系統故障的方法(即REDO+UNDO),才能將數據庫恢復到一致性狀態。
- 裝入相應的目志文件副本(轉儲結束時刻的日志文件副本),重做已完成的事務。即首先掃描日志文件,找出故障發生時已提交的事務的標識,將其記入重做隊列;然后正向掃描日志文件,對重做隊列中的所有事務進行重做處理。即將日志記錄中“更新后的值”寫入數據庫。
五、具有檢查點的恢復技術
?
?
第十一章 并發技術
一、并發控制
- 1、事務是并發控制的基本單位。
- 2、并發操作帶來的數據不一致性問題:
?
二、封鎖(解決并發操作帶來的數據不一致性問題)
- 排他鎖又稱為寫鎖。若事務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做任何修改。
?
三、封鎖協議
?
?
四、活鎖(封鎖技術帶來的新問題)
?
????????避免活鎖的簡單方法是采用先來先服務的策略。當多個事務請求封鎖同一數據對象時,封鎖子系統按請求封鎖的先后次序對事務排隊,數據對象上的鎖一旦釋放就批準申請隊列中第一個事務獲得鎖。
五、死鎖(封鎖技術帶來的新問題)
????????T1在等待T2,而T2又在等待T的局面,T1和T2兩個事務永遠不能結束,形成死鎖。
1、死鎖的預防
- 一次封鎖法;
- 順序封鎖法;
2、死鎖的診斷與解除
- 超時法;
- 等待圖法;
六、并發調度的可串行性
1、可串行化調度
????????多個事務的并發執行是正確的,當且僅當其結果與按某一次序串行地執行這些事務時的結果相同,稱這種調度策略為可串行化調度
????????可串行性是并發事務正確調度的準則。按這個準則規定,一個給定的并發調度,當且僅當它是可串行化的,才認為是正確調度。
2、沖突可串行化調度
?????? 沖突操作是指不同的事務對同一個數據的讀寫操作和寫寫操作。
?????? 一個調度Sc在保證沖突操作的次序不變的情況下,通過交換兩個事務不沖突操作的次序得到另一個調度Sc',如果Sc'是串行的,稱調度Sc為沖突可串行化的調度。若一個調度是沖突可串行化,則一定是可串行化的調度。因此可以用這種方法來判斷一個調度是否是沖突可串行化的。
?????? 沖突可串行化調度是可串行化調度的充分條件,不是必要條件。
七、封鎖的粒度
?????? 封鎖對象的大小稱為封鎖粒度。
?????? 封鎖粒度與系統的并發度和并發控制的開銷密切相關。直觀地看,封鎖的粒度越大,數據庫所能夠封鎖的數據單元就越少,并發度就越小,系統開銷也越小;反之,封鎖的粒度越小,并發度較高,但系統開銷也就越大。