数据库系统
專題六: 數據庫知識
一、數據庫管理系統的功能和特征
· 數據庫模型(概念模式、外模式、內模式)
· 數據模型,ER圖,第一范式、第二范式、第三范式
· 數據操作(集合運算和關系運算)
· 數據庫語言(SQL)
· 數據庫的控制功能(并發控制、恢復、安全性、完整性)
· 數據倉庫和分布式數據庫基礎知識
數據庫系統的三級結構
1.用戶級數據庫
用戶級數據庫對應于外模式,是最接近于用戶的一級數據庫,是用戶看到和使用的數據庫,又 稱用戶視圖。用戶級數據庫主要由外部記錄組成,不同用戶視圖可以互相重疊,用戶的所有操作都 是針對用戶視圖進行的。
2.概念級數據庫
概念級數據庫對應于概念模式,介于用戶級和物理級之間,是所有用戶視圖的最小并集,是數 據庫管理員看到和使用的數據庫,又稱DBA視圖。概念級數據庫由概念記錄組成,一個數據庫可有 多個不同的用戶視圖,每個用戶視圖由數據庫某一部分的抽象表示所組成。一個數據庫應用系統只 存在一個DBA視圖,它把數據庫作為一個整體的抽象表示。概念級模式把用戶視圖有機地結合成一 個整體,綜合平衡考慮所有用戶要求,實現數據的一致性,最大限度降低數據冗余,準確地反映數 據間的聯系。
3.物理級數據庫
物理級數據庫對應于內模式,是數據庫的低層表示,它描述數據的實際存儲組織,是最接近于 物理存儲的級,又稱內部視圖。物理級數據庫由內部記錄組成,物理級數據庫并不是真正的物理存 儲,而是最接近于物理存儲的級。
1.概念模式
概念模式(模式、邏輯模式)用以描述整個數據庫中數據庫的邏輯結構,描述現實世界中的實 數據庫系統兩級獨立性 體及其性質與聯系,定義記錄、數據項、數據的完整性約束條件及記錄之間的聯系,是數據項值的 框架。數據庫系統概念模式通常還包含有訪問控制、保密定義、完整性檢查等方面的內容,以及概念/ 物理之間的映射。 概念模式是數據庫中全體數據的邏輯結構和特征的描述,是所有用戶的公共數據視圖。一個數 據庫只有一個概念模式。
2.外模式
外模式(子模式、用戶模式)用以描述用戶看到或使用的那部分數據的邏輯結構,用戶根據外 模式用數據操作語句或應用程序去操作數據庫中的數據。外模式主要描述組成用戶視圖的各個記錄 的組成、相互關系、數據項的特征、數據的安全性和完整性約束條件。 外模式是數據庫用戶(包括程序員和最終用戶)能夠看見和使用的局部數據的邏輯結構和特征 的描述,是數據庫用戶的數據視圖,是與某一應用有關的數據的邏輯表示。一個數據庫可以有多個 外模式。一個應用程序只能使用一個外模式。
3.內模式
內模式是整個數據庫的最低層表示,不同于物理層,它假設外存是一個無限的線性地址空間。 內模式定義的是存儲記錄的類型、存儲域的表示、存儲記錄的物理順序,指引元、索引和存儲路徑 等數據的存儲組織。 內模式是數據物理結構和存儲方式的描述,是數據在數據庫內部的表示方式。一個數據庫只有 一個內模式。
4.三級模式的關系
模式是數據庫的中心與關鍵; 內模式依賴于模式,獨立于外模式和存儲設備; 外模式面向具體的應用,獨立于內模式和存儲設備; 應用程序依賴于外模式,獨立于模式和內模式。
①模式:也稱概念模式,它是數據庫中全體數據的邏輯結構和特征的描述。只涉及型的描述,不涉及具體的值。概念模式的一個具體值稱為模式的一個實例,同一個模式可以有很多實例。描述模式的數據定義語言為:模式DDL。②外模式:也稱用戶模式或子模式,是用戶與數據庫系統的接口,是用戶看到的那部分數據的描述。 描述外模式的數據定義語言為:外模式DDL。③內模式:也稱存儲模式,是數據物理結構和存儲方式的描述,是數據在數據庫內部的表示方法,定義所有的內部記錄類型、索引和文件的組織方法,以及數據控制方面的細節。描述內模式的數據定義語言為:內模式DDL。(一個數據庫系統中,外模式可以有多個,而模式和內模式只有有一個!!!)外模式——模式——內模式 分別對應:視圖——基本表——文件數據庫系統兩級獨立性
數據庫系統兩級獨立性是指物理獨立性和邏輯獨立性。三個抽象級間通過兩級映射(外模式/模 式映射,模式/內模式映射)進行相互轉換,使得數據庫的三級形成一個統一的整體。
1.物理獨立性
物理獨立性是指用戶的應用程序與存儲在磁盤上的數據庫中的數據是相互獨立的。當數據的物 理存儲改變時,應用程序不需要改變。 物理獨立性存在于概念模式和內模式之間的映射轉換,說明物理組織發生變化時應用程序的獨 立程度。
2.邏輯獨立性
邏輯獨立性是指用戶的應用程序與數據庫中的邏輯結構是相互獨立的。當數據的邏輯結構改變 時,應用程序不需要改變。 邏輯獨立性存在于外模式和概念模式之間的映射轉換,說明概念模式發生變化時應用程序的獨 立程度。值得注意的是:邏輯獨立性比物理獨立性更難實現。
二、 關系模型
轉化為數據庫的表,要記住,誰多向誰轉。對于1對1,聯系的屬性跟誰都可以;對于1對多,就把聯系的屬性放在多的,部門里面(如下圖)。
如果是對于多對多,那么就直接成立一個表哦。
三、關系規范化理論
候選碼的求解方法
在一個關系模式中,我們對函數依賴集中的所有的屬性進行分類(L、R、LR、N),L類表示該屬性只出現在左邊,R類表示該屬性只出現在右邊,LR類表示該屬性在左右兩邊都出現過,N類表示該屬性沒有出現。
對關系模式中的所有屬性進行分類之后,最終的結論是:候選碼中一定包含L類屬性和N類屬性,一定不包含R類屬性,可能包含LR類屬性。此時我們只需要去求L類和N類屬性集的閉包就可以了,如果該屬性集的閉包等于全集,那么該屬性集就是該關系模式的候選碼。如果不是,就從LR類屬性中依次添加單個屬性,每添加一個,就求一次閉包,直到屬性集的閉包等于全集,即可確定該關系模式的候選碼。
關系模式的存儲異常問題
設有一個關系模式R(SNAME,CNAME,TNAME TADDRESS),其屬性分別表示學生姓名、選 修的課程名、任課教師姓名和任課教師地址。
仔細分析,這個模式存在著下列存儲異常的問題:
數據冗余:
如果某門課程有100個學生選修,那么在R的關系中就要出現100個元組,這門課程 的任課教師姓名和地址也隨之重復出現100次。
修改異常:
由于上述冗余問題,當需要修改這個教師的地址時,就要修改100個元組中的地址 值,否則就會出現地址值不一致的現象。
插入異常:
如果不知道聽課學生名單,則這個教師的任課情況和家庭地址就無法進入數據庫; 否則就要在學生姓名處插入空值。
刪除異常:
如果某門課程的任課教師要更改,那么原來任課教師的地址將隨之丟失。
范式
范式可以解決上述問題。
關系的相關名詞
第一范式(1NF):
如果關系模式R的每個關系r的屬性值都是不可分的原子值,那么稱R是第一 范式的模式,r是規范化的關系。關系數據庫研究的關系都是規范化的關系。
簡單的說,這個就是不能表中有表。
第二范式(2NF):
若關系模式R是1NF,且每個非主屬性完全函數依賴于候選鍵,那么稱R是 2NF模式。
第三范式(3NF):
如果關系模式R是1NF,且每個非主屬性都不傳遞依賴于R的候選碼,則稱R 是3NF。
BC范式(BCNF):
若關系模式R是1NF,且每個屬性都不傳遞依賴于R的候選鍵,那么稱R是 BCNF模式。
三、關系運算
傳統的集合運算是二目運算,包括并、交、差、廣義笛卡兒積四種運算。
1.并
設關系R和S具有相同的關系模式,R和S的并是由屬于R或屬于S的元組組成的集合,記為RS.形 式定義如下: 式中t是元組變量(下同)。顯然,R∪S=S∪R.
2.差
關系R和S具有相同的關系模式,R和S的差是由屬于R但不屬于S的元組組成的集合,記為R–S.
3.交
關系R和S具有相同的關系模式,R和S的交是由既屬于R又屬于S的元組組成的集合,記為R∩S.形 式定義如下: 顯然,R∩S =R–(R–S),或者R∩S = S–(S–R)。
4.笛卡兒積
設關系R和S元數分別為r和s.R和S的笛卡兒積是一個r+s元的元組集合,每個元組的前r個分量來 自R的一個元組,后 s個分量來自S的一個元組,記為R×S.形成定義如下: 若R有m個元組,S有n個元組,則R×S有m×n個元組。
1.投影
投影操作從關系R中選擇出若干屬性列組成新的關系,該操作對關系進行垂直分割,消去某些 列,并重新安排列的順序,再刪去重復元組。記為: 其中A為R的屬性列。這樣的操作是用于選擇列。
2.選擇
選擇操作在關系R中選擇滿足給定條件的所有元組,記為: 其中F表示選擇條件,是一個邏輯表達式(邏輯運算符+算術表達式 )。選擇運算是從行的角度 進行的運算。這樣的操作是用于選擇行。
3.θ連接
θ連接從兩個關系的笛卡兒積中選取屬性間滿足一定條件的元組,記為: 其中A和B分別為R和S上度數相等且可比的屬性組。θ為"="的連接,稱為等值連接,記為: 如果兩個關系中進行比較的分量必須是相同的屬性組,并且在結果中把重復的屬性列去掉,則稱為自然連接。
4.除法
設兩個關系R和S的元數分別為r和s(設r>s>0),那么R÷S是一個(r–s)元的元組的集合。 R÷S是滿足下列條件的最大關系:其中每個元組t與S中每個元組u組成新元組<t,u>必在關系R中。
5.外連接
兩個關系R和S進行自然連接時,選擇兩個關系R和S公共屬性上相等的元組,去掉重復的屬性列 構成新關系。這樣,關系R中的某些元組有可能在關系S中不存在公共屬性值上相等的元組,造成關 系R中這些元組的值在運算時舍棄了;同樣關系S中的某些元組也可能舍棄。為此,擴充了關系運算 左外連接、右外連接和完全外連接。 左外連接:R和S進行自然連接時,只把R中舍棄的元組放到新關系中。 右外連接:R和S進行自然連接時,只把S中舍棄的元組放到新關系中。 完全外連接:R和S進行自然連接時,只把R和S中舍棄的元組都放到新關系中。
四、數據庫語言SQL
創建表
CREATE TABE <表名>
(<列名><數據類型>[列級完整性約束條件][, <列名><數據類型>[列級完整性約束條件]][, <表級完整性約束條件>]);
修改表
修改基本表 修改基本表的命令格式如下:
ATER TABE <表名>
[ADD <新列名><數據類型>[完整性約束]] [DROP <完整性約束名>]
[MODIFY <列名><數據類型>];
刪除表
查詢表
單表查詢
查詢全體學生的學號與姓名的命令格式為:SEECT Sno,Sname FROM student;查詢全體男學生的詳細記錄的命令格式為: SEECT * FROM student WHERE Ssex='男'; 查詢所有年齡大于21歲的學生的姓名、出生年份和所有系,要求用小寫字母表示所有系名。其 格式如下: SEECT Sname, 'Year of Birth:',2004 – Sage,ower(Sdept) FROM student WHERE Sage>21; 查詢IS系、MA系和CS系學生的姓名和性別的命令格式為: SEECT Sname,Sex FROM student WHERE Sdept In('IS','MA','CS');連接查詢
查詢每個學生及其選修課程的情況。SEECT Student.*,SC.* FROM Student,SC WHERE Student.Sno= SC.Sno;查詢每一門課程的間接選修課。SEECT F.Cno,S.Cpno FROM Course F,Course S WHERE F.Cpno = S.Cno; 其中的F和S稱為course的別名。 查詢每個學生及其選修課程的情況。 SEECT Student.Sno,Sname,Ssex,Sage,Cno,Grade FROM Student eft Outer Join SC ON Student.Sno = SC.Sno;```嵌套查詢
查詢與"劉晨"在同一系學習的學生。SEECT Sno,Sname FROM Student WHERE Sdept IN (SEECT Sdept FROM Student WHERE Sname='劉晨'); 查詢選修了課程名為信息系統(MIS)的學生學號和姓名。SEECT Sno,Sname FROM Student WHERE Sno IN (Seect Sno FROM SC WHERE Cno IN (SEECT Cno FROM Course WHERE Cname='MIS')); 查詢其他系中比信息系某一個學生年齡小的學生姓名和年齡。 SEECT Sname,Sage FROM Student WHERE Sage < Any (SEECT Sage FROM Student WHERE Sdept='IS');或者: SEECT Sname,Sage FROM Student WHERE Sage < (SEECT Max(Sage) FROM Student WHERE Sdept='IS') AND Sdept <> 'IS';集合查詢
例如,要查詢計算機系的學生及年齡不大于19歲的學生的命令格式為:SEECT * FROM Student WHERE Sdept='CS' UNION SEECT * FROM Student WHERE Sage<=19;庫函數
COUNT(*) 計算元組的個數COUNT(列名) 對某一列中的值計算個數。SUM(列名) 求某一列值的總和AVG(列名) 求某一列值的平均值MAX(列名) 求某一列值中的最大值MIN(列名) 求某一列值中的最小值五、并發控制
事務
數據庫的并發操作帶來的問題:
丟失更新問題,不一致分析問題(讀過時的數據),依賴于未 提交更新的問題(讀了"臟"數據)。
這三個問題需要DBMS的并發控制子系統來解決。 處理并發控制的主要方法是采用封鎖技術。
X封鎖和S封鎖
有兩種封鎖,X封鎖和S封鎖。 排他型封鎖(簡稱X封鎖):其含義是如果事務T對數據A(可以是數據項、記錄、數據集以至整 個數據庫)實現了X封鎖,那么只允許事務T讀取和修改數據A,其他事務要等事務T解除X封鎖以后, 才能對數據A實現任何類型的封鎖。可見X封鎖只允許一個事務獨鎖某個數據,具有排他性。 共享型封鎖(簡稱S封鎖):X封鎖只允許一個事務獨鎖和使用數據,要求太嚴。需要適當從 寬,例如可以允許并發讀,但不允許修改,這就產生了S封鎖概念。S封鎖的含義是如果事務T對數據 A實現了S封鎖,那么允許事務T讀取數據A,但不能修改數據A,在所有S封鎖解除之前決不允許任何事 務對數據A實現X封鎖。 在多個事務并發執行的系統中,主要采取封鎖協議來進行處理。
封鎖協議
一級封鎖協議:事務T在修改數據R之前必須先對其加X封鎖,直到事務結束才釋放。一級封鎖協 議可防止丟失修改,并保證事務T是可恢復的。但不能保證可重復讀和不讀"臟"數據。
二級封鎖協議:一級封鎖協議加上事務T在讀取數據R之前先對其加S鎖,讀完后即可釋放S鎖。 二級封鎖協議可防止丟失修改,還可防止讀"臟"數據。但不能保證可重復讀。
三級封鎖協議:一級封鎖協議加上事務T在讀取數據R之前先對其加S鎖,直到事務結束才釋放。 三級封鎖協議可防止丟失修改、防止讀"臟"數據與防止數據重復讀。 兩段鎖協議:所有事務必須分兩個階段對數據項加鎖和解鎖。其中擴展階段是在對任何數據進 行讀、寫操作之前,首先要申請并獲得對該數據的封鎖;收縮階段是在釋放一個封鎖之后,事務不 能再申請和獲得任何其他封鎖。若并發執行的所有事務均遵守兩段封鎖協議,則對這些事務的任何 并發調度策略都是可串行化的。遵守兩段封鎖協議的事務可能發生死鎖。
總結
- 上一篇: 大话数据结构 - 串
- 下一篇: matlab基于瑞利信道,一种基于MAT