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