結(jié)構(gòu)數(shù)據(jù)模型
- 數(shù)據(jù)結(jié)構(gòu):實(shí)體類型和實(shí)體間聯(lián)系的表達(dá)和實(shí)現(xiàn)。
- 數(shù)據(jù)操作:對(duì)數(shù)據(jù)庫(kù)的檢索和更新(插入,刪除,修改)
- 數(shù)據(jù)完整性約束:給出數(shù)據(jù)以及聯(lián)系應(yīng)具有的制約和依賴規(guī)則。
實(shí)體聯(lián)系圖(ER模型)

實(shí)體:客觀存在,可以相互區(qū)別的事物。
聯(lián)系:實(shí)體之間的相互關(guān)系。聯(lián)系有 一元聯(lián)系,二元聯(lián)系和三元聯(lián)系。
? 二元聯(lián)系:一對(duì)一聯(lián)系,一對(duì)多聯(lián)系,多對(duì)多聯(lián)系。
屬性:實(shí)體的每一個(gè)特性稱為屬性。

DBMS工作模式

- 接受應(yīng)用程序的數(shù)據(jù)請(qǐng)求和處理請(qǐng)求
- 將用戶的數(shù)據(jù)請(qǐng)求(高級(jí)指令)轉(zhuǎn)為復(fù)雜的機(jī)器代碼(低層指令)
- 實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作
- 從對(duì)數(shù)據(jù)庫(kù)的操作中接受查詢結(jié)果
- 對(duì)查詢結(jié)果進(jìn)行處理(格式轉(zhuǎn)換)
- 將處理結(jié)果返回給用戶
用戶訪問(wèn)DBMS的過(guò)程
用戶對(duì)數(shù)據(jù)庫(kù)進(jìn)行操作,是由DBMS把操作從應(yīng)用程序帶到外部級(jí),概念級(jí),再導(dǎo)向內(nèi)部級(jí),進(jìn)而通過(guò)OS操縱存儲(chǔ)中的數(shù)據(jù)。同時(shí),DBMS為應(yīng)用程序在內(nèi)部開(kāi)辟一個(gè)DB的系統(tǒng)緩沖區(qū),用于數(shù)據(jù)的傳輸和格式的轉(zhuǎn)換。而三級(jí)結(jié)構(gòu)定義存放在數(shù)據(jù)字典中。

DBMS總是基于某種數(shù)據(jù)模型,可以把DBMS看成是某種數(shù)據(jù)模型在計(jì)算機(jī)系統(tǒng)上的具體實(shí)現(xiàn)。根據(jù)數(shù)據(jù)模型的不同,DBMS可以分為層次型,網(wǎng)狀型,關(guān)系型,面向?qū)ο笮汀?/p>
DBMS主要功能
-
數(shù)據(jù)庫(kù)的定義功能
DBMS提供DDL(Data g Definition Language)定義數(shù)據(jù)庫(kù)的三級(jí)結(jié)構(gòu),兩級(jí)映像,定義數(shù)據(jù)庫(kù)的完整性約束,保密限制等約束。在DBMS中應(yīng)包含DDL的編譯程序。
-
數(shù)據(jù)庫(kù)的操縱功能
DMBS提供對(duì)數(shù)據(jù)的操作?;镜臄?shù)據(jù)操作有兩類:檢索(查詢)和更新(插入,刪除,更新)。在DBMS中應(yīng)包括DML的變異程序或解釋程序。
-
數(shù)據(jù)庫(kù)的保護(hù)功能
- 數(shù)據(jù)庫(kù)的恢復(fù)。在數(shù)據(jù)庫(kù)被破壞或數(shù)據(jù)不正確時(shí),系統(tǒng)有能力把數(shù)據(jù)庫(kù)恢復(fù)到正確的狀態(tài)。
- 數(shù)據(jù)庫(kù)的并發(fā)控制。在多個(gè)用戶同時(shí)對(duì)同一個(gè)數(shù)據(jù)進(jìn)行操作時(shí),系統(tǒng)應(yīng)能加以控制,防止破壞DB的數(shù)據(jù)。
- 數(shù)據(jù)庫(kù)的完整性控制。保證數(shù)據(jù)庫(kù)中的數(shù)據(jù)以及語(yǔ)義的正確性和有效性,防止任何對(duì)數(shù)據(jù)造成錯(cuò)誤的操作。
- 數(shù)據(jù)庫(kù)的安全性控制。防止未經(jīng)授權(quán)的用戶存取數(shù)據(jù)庫(kù)中的數(shù)據(jù),以免數(shù)據(jù)的泄漏,更改或破壞。
-
數(shù)據(jù)庫(kù)的維護(hù)功能
包括數(shù)據(jù)庫(kù)載入,轉(zhuǎn)換,轉(zhuǎn)儲(chǔ),數(shù)據(jù)庫(kù)的改組以及性能監(jiān)控。
-
數(shù)據(jù)字典
數(shù)據(jù)庫(kù)匯總存放三級(jí)結(jié)構(gòu)定義的數(shù)據(jù)庫(kù)稱為數(shù)據(jù)字典(Data Dictionary,DD)。對(duì)數(shù)據(jù)庫(kù)的操作都要經(jīng)過(guò)數(shù)據(jù)字典才能實(shí)現(xiàn)。數(shù)據(jù)字典還存放數(shù)據(jù)庫(kù)運(yùn)行時(shí)的統(tǒng)計(jì)信息,例如記錄個(gè)數(shù),訪問(wèn)次數(shù)。管理DD的子系統(tǒng)稱為「DD系統(tǒng)」
關(guān)系數(shù)據(jù)模型
關(guān)鍵碼和表之間的聯(lián)系
- 超鍵:能唯一識(shí)別元組的屬性或?qū)傩约Q為關(guān)系的超鍵。
- 候選鍵:若一個(gè)屬性集能唯一標(biāo)識(shí)元組,且又不含有多余的屬性,這個(gè)屬性集稱為關(guān)系的候選鍵。
- 主鍵:若一個(gè)關(guān)系中有多個(gè)候選鍵,選其中一個(gè)為關(guān)系的主鍵。用主鍵實(shí)現(xiàn)在關(guān)系定義中「表中任意兩行(元組)不能相同」的約束。包含在任何一個(gè)候選鍵中的屬性稱為主屬性,不包含在任何鍵中的屬性稱為非主屬性或非鍵屬性。
- 外鍵:若一個(gè)關(guān)系R中包含另一個(gè)關(guān)系S的主鍵所對(duì)應(yīng)的屬性組F,則稱F為R的外鍵。
關(guān)系模型的完整性規(guī)則
實(shí)體完整性規(guī)則:關(guān)系元組中的主鍵不能為空
-
參照完整性規(guī)則:關(guān)系與關(guān)系之間是通過(guò)公共屬性實(shí)現(xiàn)的。這個(gè)公共屬性是一個(gè)表的主鍵和另一個(gè)表的外鍵。外鍵必須是另一個(gè)表的主鍵的有效值或「空值」。
參照完整性規(guī)則定義:
如果屬性集K是關(guān)系模式R1的主鍵,K也是關(guān)系模式R2的外鍵,那么在R2中,K的值只能允許兩種可能:空值 / 等于R1 關(guān)系中的某個(gè)主鍵值。
注意
1.外鍵和相應(yīng)的主鍵不可以同名,只要定義在相同值域上即可。
2.R1和R2也可以是同一個(gè)關(guān)系模式,表示了同一個(gè)關(guān)系中不同元組之間的聯(lián)系。
3.外鍵值是否允許空,應(yīng)視具體情況而定。(在模式中,若外鍵為該模式主鍵中的成分時(shí),則外鍵不允許為空,否則允許為空)
用戶定義的完整性規(guī)則:這是針對(duì)具體數(shù)據(jù)的約束條件,由環(huán)境決定。系統(tǒng)應(yīng)定義和檢驗(yàn)這類完整性的機(jī)制,以便統(tǒng)一的系統(tǒng)方法處理它們。(如學(xué)生成績(jī)應(yīng)該大于或等于0,職工的工齡應(yīng)小于年齡,人的身高不能超過(guò)3米)
關(guān)系模型的形式定義
- 數(shù)據(jù)結(jié)構(gòu):數(shù)據(jù)庫(kù)中的全部數(shù)據(jù)及其相互聯(lián)系都被組織成關(guān)系(二維表格),關(guān)系模型基本的數(shù)據(jù)結(jié)構(gòu)是關(guān)系。
- 數(shù)據(jù)操作:關(guān)系模型提供一組完備的高級(jí)關(guān)系運(yùn)算,以支持對(duì)數(shù)據(jù)庫(kù)的各種操作,關(guān)系運(yùn)算分為關(guān)系代數(shù)和關(guān)系演算兩類。
- 關(guān)系模型的三類完整性規(guī)則。
關(guān)系代數(shù)的五個(gè)基本操作
并(Union)
RUS = {t | t ∈ R V t ∈ S }
t是元組變量,R和S的元數(shù)相同。兩個(gè)關(guān)系的并運(yùn)算是將兩個(gè)關(guān)系中的所有元組構(gòu)成一個(gè)新關(guān)系。并運(yùn)算要求兩個(gè)關(guān)系屬性的性質(zhì)必須一致且并運(yùn)算的結(jié)果要消除重復(fù)的元組。
差(Difference)
R-S = {t | t∈ R ∧ t ? S }
t 是元組變量,R和S元數(shù)相同。相應(yīng)的屬性取自同一個(gè)域,則關(guān)系R和關(guān)系S的差由屬于R但不屬于S的所有元組組成。
笛卡爾積(Cartesian Product)
RXS = {t | t = < tr, ts > ∧ tr ∈ R ∧ ts ∈ S}
tr, ts 分別表示有 r個(gè)分量和s個(gè)分量,若R有n個(gè)元組,S有m個(gè)元組,則RXS有 mxn個(gè)元組。
(在學(xué)生和必修課程兩個(gè)關(guān)系上,產(chǎn)生選修關(guān)系:要求每個(gè)學(xué)生必須選修所有的必修課程)
投影(Projection)
π <i1,.....im> (R) = {t | t = <ti1,.....tim> ∧ <ti1,.....tim> ∈ R}
這個(gè)操作是對(duì)一個(gè)關(guān)系進(jìn)行垂直分割,消去某些列,并重新安排列的順序,再刪除重復(fù)的元組。是從R中選擇若干屬性列組成一個(gè)m元元組的集合。
(職工表(職工編號(hào),姓名,部門) 映射 職工表中的「部門」,映射的新表只有部門一個(gè)元組,即刪除除了部門的其他列,并且會(huì)刪除職工表中部門出現(xiàn)重復(fù)的元組)
選擇(Selection)
σF(R) = { t | t ∈ R ∧ F(t) = true}
這個(gè)操作是根據(jù)某些條件對(duì)關(guān)系進(jìn)行水平分割,即選擇符合條件的元組。
關(guān)系代數(shù)中的組合操作
交(Intersection)
R∩S = {t | t ∈ R ∧ t ∈ S}
交可由關(guān)系的差來(lái)實(shí)現(xiàn):
R∩S = R-(R-S) 或 R∩S = S-(S-R)
聯(lián)接(Join)
聯(lián)接操作可將兩個(gè)關(guān)系連在一起,形成新的關(guān)系。聯(lián)接操作是笛卡爾積和選擇操作的組合。
θ聯(lián)接:從R關(guān)系和S關(guān)系的笛卡爾積中選取屬性值滿足某一θ操作的元組。如果 θ 為等號(hào),那么這個(gè)聯(lián)接操作為等值聯(lián)接。
F聯(lián)接:從R關(guān)系和S關(guān)系的笛卡爾積中選取屬性值滿足某一F操作的元組。這里的F是形為F1∧F2....∧Fn的公式,每個(gè)Fi是形為 iθj 的式子。
自然聯(lián)接(Natural Union)
自然聯(lián)接是一種特殊的等值聯(lián)接,它要求兩個(gè)關(guān)系中進(jìn)行比較的分量必須是相同的屬性組,并且要在結(jié)果中把重復(fù)的屬性去掉。
1.計(jì)算 R X S
2.設(shè)R和S的公共屬性是A1....Ak,挑選R X S 中滿足 R.Ai = S.Ai 的那些元組。
3.去掉S.Ai這些列(保留R.Ai)
除(Division)
R/S是(R-S)的元組的集合。
R /S 是滿足下列條件的最大關(guān)系:其中每個(gè)元組t與S中的每個(gè)元組u組成的新元組 < t,u >必須在關(guān)系R中。
查詢優(yōu)化的一般策略
- 在關(guān)系代數(shù)表達(dá)式中盡可能早的進(jìn)行選擇操作。對(duì)于有選擇運(yùn)算的表達(dá)式,應(yīng)盡可能提前執(zhí)行選擇操作,以得到較小的中間結(jié)果,減少運(yùn)算量和讀外存塊的次數(shù)。
- 把笛卡爾積和其后的選擇操作合并成F聯(lián)接運(yùn)算,因?yàn)閮蓚€(gè)關(guān)系的笛卡爾積是一個(gè)元組數(shù)較大的關(guān)系(中間結(jié)果),而做了選擇操作以后,可能會(huì)獲得很小的關(guān)系。這兩個(gè)操作一起做,即對(duì)每個(gè)聯(lián)接后的元組,立即檢查其是否滿足條件,決定其取舍,將會(huì)減少時(shí)間和空間的開(kāi)銷。
- 同時(shí)計(jì)算一連串的選擇和投影操作,以免分開(kāi)運(yùn)算造成多次掃描文件,從而能節(jié)省操作時(shí)間。
- 如果在一個(gè)表達(dá)式中多次出現(xiàn)某個(gè)子表達(dá)式,那么應(yīng)該把子表達(dá)式的結(jié)果保存起來(lái),以免重復(fù)計(jì)算。
- 適當(dāng)?shù)膶?duì)關(guān)系文件進(jìn)行預(yù)處理。關(guān)系以文件形式存儲(chǔ),根據(jù)實(shí)際需要對(duì)文件進(jìn)行排序或建立索引文件,這樣能使兩個(gè)關(guān)系在進(jìn)行聯(lián)接時(shí),能很快有效的對(duì)應(yīng)起來(lái)。
- 在計(jì)算表達(dá)式之前應(yīng)該先估計(jì)一下怎么計(jì)算合算。