"數(shù)據(jù)庫(kù)之關(guān)系數(shù)據(jù)庫(kù)部分的詳解,期末特種兵"
2.1 關(guān)系數(shù)據(jù)庫(kù)的結(jié)構(gòu)
1.關(guān)系模型的組成部分
1. 描述DB的各種數(shù)據(jù)的基本結(jié)構(gòu)形式(Table/Relation)
2. 描述Table和Table之間所可能發(fā)生的各種操作(關(guān)系運(yùn)算)
3. 描述這些操作所遵循的約束條件(完整性約束)
2.一些關(guān)系模型中的術(shù)語(yǔ)
1. 關(guān)系:表
2. 元組:行
3. 屬性:列
4. 關(guān)系實(shí)例:一個(gè)關(guān)系的特定實(shí)例,關(guān)系實(shí)例包含一組特定的行
5. 域:每個(gè)屬性都存在一個(gè)允許取值的集合
6. 原子的:如果一個(gè)域中的元素被認(rèn)為是不可再分的單元
7. 空值:表示值未知或者不存在
8. 域的基數(shù):集合中元素的個(gè)數(shù)
9. 關(guān)系:笛卡爾積中具有某一方面意義的那些元組被稱(chēng)為一個(gè)關(guān)系
10. 分量:元組中的一個(gè)屬性值
2.2 數(shù)據(jù)庫(kù)模式
1.關(guān)系模式:
一般一個(gè)關(guān)系模式由一個(gè)屬性列表及各屬性所對(duì)應(yīng)的域組成
可用R(A1:D1,A2:D2,...,An:Dn)表示
可簡(jiǎn)記為R(A1,A2,...,An)
Ai表示屬性,Di表示域,n是關(guān)系的度或者目,關(guān)系中元組的個(gè)數(shù)稱(chēng)為關(guān)系的基數(shù)
2.關(guān)系模式與關(guān)系
1. 同一關(guān)系模式下,可有很多的關(guān)系
2. 關(guān)系模式是關(guān)系的結(jié)構(gòu),關(guān)系是關(guān)系模式在某一時(shí)刻的數(shù)據(jù)
3. 關(guān)系模式是穩(wěn)定的;而關(guān)系是某一時(shí)刻的值,是隨時(shí)間變化的
3.關(guān)系的特性
1. 列是同質(zhì):每一列的分量來(lái)自同一個(gè)域,具有相同的數(shù)據(jù)類(lèi)型
2. 不同的列可以來(lái)自同一個(gè)域,稱(chēng)其中每一列為一個(gè)屬性,不同的屬性要給予不同的屬性名
3. 列位置互換性和行位置互換性
4. 關(guān)系中任意兩個(gè)元組不能完全相同(在現(xiàn)實(shí)中的表可能不遵守此特性),此為關(guān)系和表的差別
5. 屬性不可再分(關(guān)系的第一范式)
2.3 碼
1.超碼super key
形式:一個(gè)或多個(gè)屬性的集合
作用:在一個(gè)關(guān)系中唯一地標(biāo)識(shí)一個(gè)元組
特點(diǎn):
? ?1. 可能包含無(wú)關(guān)屬性
? ?2. 超碼的任意超集也是超碼。(通俗講,就是同一個(gè)關(guān)系r上,如果某個(gè)屬性集合S包含超碼K,即K是S的子集,那么S也是 r 的超碼)
? ?3. 一張表(一個(gè)關(guān)系)一定有超碼,因?yàn)橹辽偎袑傩缘慕M合一定是超碼,能唯一確定一個(gè)元組
2.候選碼candidate key
形式:一個(gè)或多個(gè)屬性的集合
作用:在一個(gè)關(guān)系中唯一地標(biāo)識(shí)一個(gè)元組
特點(diǎn):
? ?1. 是超碼的一個(gè)子集
? ?2. 任意真子集都不可能是超碼,候選碼就是**最小的超碼**
? ?3. 沒(méi)有無(wú)關(guān)屬性
? ?4. 不唯一
3.主碼primary key
形式:一個(gè)或多個(gè)屬性的集合
作用:在一個(gè)關(guān)系中唯一地標(biāo)識(shí)一個(gè)元組
特點(diǎn):
? ?1. 是候選碼之一
? ?2. 唯一或沒(méi)有
? ?3. 由數(shù)據(jù)庫(kù)設(shè)計(jì)者指定,不指定的話(huà)表就沒(méi)有主碼
4.主屬性與非主屬性
包含在任意一個(gè)候選碼中的屬性被稱(chēng)為主屬性,而其他屬性被稱(chēng)為非主屬性
5.外碼foreign key(兩個(gè)關(guān)系連接的紐帶)
關(guān)系 r1 的屬性中包含關(guān)系 r2的主碼 ,設(shè)這個(gè)屬性為 k,k 就是 r1 的外碼
r1 是 k 依賴(lài)的參照關(guān)系(referencing relation)
r2 是 k 的被參照關(guān)系(referenced relation)
6.實(shí)體完整性
關(guān)系的主碼中的屬性值不能為空值
7.空值的含義
不知道,不存在或無(wú)意義的值
有空值需要特殊處理
8.參照完整性:
外碼可以取空值
若非空值,必須取主碼那個(gè)表中的某個(gè)值
9.用戶(hù)自定義完整性
用戶(hù)根據(jù)具體的應(yīng)用環(huán)境定義的完整性約束條件
10.DBMS對(duì)關(guān)系完整性的支持
1. 實(shí)體完整性和參照完整性由DBMS自動(dòng)支持
2. 使用戶(hù)可以自行定義關(guān)于完整性約束條件
3. 當(dāng)有更新完成時(shí),DBMS將自動(dòng)按照完整性約束檢查更新操作正確性,是否符合用戶(hù)自定義的完整性
2.4 模式圖
一個(gè)帶有主碼外碼約束的數(shù)據(jù)庫(kù)模式的表示方法
主碼屬性用下劃線(xiàn)標(biāo)注,外碼約束用從引用關(guān)系的外碼屬性指向被引用關(guān)系的主碼屬性的箭頭來(lái)表示
2.5 關(guān)系查詢(xún)語(yǔ)言
查詢(xún)語(yǔ)言:
用戶(hù)用來(lái)從數(shù)據(jù)庫(kù)請(qǐng)求獲取信息的語(yǔ)言
分為命令式、函數(shù)式以及聲明式
**命令式查詢(xún)語(yǔ)言**中,用戶(hù)指導(dǎo)系統(tǒng)在數(shù)據(jù)庫(kù)上執(zhí)行特定的運(yùn)算序列以計(jì)算出所需的結(jié)果;這類(lèi)語(yǔ)言通常有一個(gè)狀態(tài)變量的概念,狀態(tài)變量在計(jì)算的過(guò)程中被更新
**函數(shù)式查詢(xún)語(yǔ)言**中,計(jì)算被表示為對(duì)函數(shù)的求值,這些函數(shù)可以在數(shù)據(jù)庫(kù)中的數(shù)據(jù)上運(yùn)行或在其他函數(shù)給出的結(jié)果上運(yùn)行;函數(shù)沒(méi)有附帶作用,且它們并不更新程序的狀態(tài)
**聲明式查詢(xún)語(yǔ)言**中,用戶(hù)只需描述所需信息,而不用給出獲取該信息的具體步驟序列或函數(shù)調(diào)用,所需的信息通常使用某種形式的數(shù)學(xué)邏輯來(lái)表述
2.6 關(guān)系代數(shù)
關(guān)系代數(shù)由一組運(yùn)算組成,這些運(yùn)算接受一個(gè)或兩個(gè)關(guān)系作為輸入,并生成一個(gè)新的關(guān)系作為他們的結(jié)果
2.6.1 選擇運(yùn)算
選擇運(yùn)算選出滿(mǎn)足給定謂詞的元組,用小寫(xiě)希臘字母sigma(σ)來(lái)表示選擇。謂詞寫(xiě)在σ的下標(biāo)中
我們?cè)试S謂詞中使用等號(hào)、不等號(hào)、連接詞如and、or、not組合
從給定關(guān)系中選擇某幾個(gè)行組成新的關(guān)系
2.6.2 投影運(yùn)算
用符號(hào)π表示
從給定關(guān)系中選擇某幾個(gè)列組成新的關(guān)系
如有重復(fù)元組應(yīng)刪除掉
2.6.4 笛卡爾積運(yùn)算
運(yùn)算用X表示,允許我們結(jié)合來(lái)自任意兩個(gè)關(guān)系的信息
2.6.5 連接運(yùn)算(join)
1.Θ-連接
關(guān)系R和關(guān)系S的笛卡爾積中,滿(mǎn)足AθB條件的所有元組(A∈R,B∈S且具有可比性)
2.等值連接操作
特殊的Θ-連接操作
選取關(guān)系R中某屬性和關(guān)系S中某屬性值相等的元組所構(gòu)成
3.自然連接
一種特殊的等值連接
把屬性的相同且值相同的元組連接在一起
4.外連接Outer-join
左外連接:自然連接+左側(cè)表中失配的元組
右外連接:自然連接+右側(cè)表中失配的元組
全外連接:自然連接+兩側(cè)表中失配的元組
2.6.6 集合運(yùn)算
1.并相容性
1. 關(guān)系R和S的屬性數(shù)目必須相同,一個(gè)關(guān)系的屬性數(shù)量被稱(chēng)為**元數(shù)**
2. 對(duì)于任意i,關(guān)系R的第i個(gè)屬性域必須和S的第i個(gè)屬性域相同
2.并(Union)
用符號(hào)U表示
3.差(Difference)
R-S,由出現(xiàn)在R中的元素但不出現(xiàn)在S中的元素所構(gòu)成
4.交(Intersection)
用符號(hào)∩表示
2.6.7 賦值運(yùn)算
用?來(lái)表示
2.6.8 更名運(yùn)算
**更名**運(yùn)算用小寫(xiě)希臘字母rho(ρ)表示
除運(yùn)算
除法運(yùn)算常用于求解“查詢(xún)...全部的/所有的...”問(wèn)題
R÷S需要S的屬性是R屬性的真子集
關(guān)系演算
根據(jù)謂詞不同可分為關(guān)系元組演算和關(guān)系域演算
基本形式為:{ t | P(t) }
? ?其中P(t)可以是如下三種形式之一的原子公式:
? ? ? ?t ∈ R
? ? ? ?t 是關(guān)系 R 中的一個(gè)元組
? ? ? ?s[A] θ c
? ? ? ?元組分量s[A]與常量 c 之間滿(mǎn)足比較關(guān)系
? ? ? ?θ:比較運(yùn)算符,<, <=,=, <>,>, >=
? ? ? ?s[A] θ u[B]
? ? ? ?s[A] 與 u[B] 為元組分量,A和B分別是某些關(guān)系的屬性,他們之間滿(mǎn)足比較關(guān)系θ.
運(yùn)算符優(yōu)先順序
括弧、θ、?、?、┐、∧、∨
存在量詞?與全稱(chēng)量詞?
若元組變量t前面有存在量詞或全稱(chēng)量詞被稱(chēng)為**約束變量**,否則被稱(chēng)為**自由變量**
域演算
關(guān)系域演算公式的基本形式: { < x1 , x2 , … , xn > | P ( x1 , x2 , … , xn ) }其中, xi 代表域變量或常量, P為以xi為變量的公式。公式P可以遞歸地進(jìn)行構(gòu)造:
三種形式的原子公式是公式
< x1 , x2 , … , xn > ∈ R。 其中xi 代表域變量或常量, 表示由域變量構(gòu)成的< x1 ,x2 , … , xn >是屬于關(guān)系R的
x θ c。 其中,域變量x與常量c之間滿(mǎn)足比較關(guān)系θ 。θ:比較運(yùn)算符 <, <=, =, <>, >, >=
x θ y。其中,域變量x與域變量y之間滿(mǎn)足比較關(guān)系θ
QBE語(yǔ)言
基本部分:
1. 關(guān)系名區(qū):用于書(shū)寫(xiě)欲待查詢(xún)的關(guān)系名
2. 屬性名區(qū):用于顯示對(duì)應(yīng)關(guān)系名區(qū)關(guān)系的所屬性名
3. 操作命令區(qū):用于書(shū)寫(xiě)查詢(xún)操作的命令
4. 查詢(xún)條件區(qū):用于書(shū)寫(xiě)查詢(xún)條件
操作命令
1. Print或P. 顯示輸出
2. Delete或D. 刪除
3. Insert或I. 插入
4. Update或U. 更新
查詢(xún)條件
1. 直接在查詢(xún)條件區(qū)書(shū)寫(xiě),形式為θ參量
2. θ可以是>,<>,<,>=,<=;如省略θ,默認(rèn)為=
3. θ參量可以為常量,可直接書(shū)寫(xiě)
示例元素與投影
條件 θ 參量中的參量也可以是域變量,用任何一個(gè)值(不必是結(jié)果中的值)帶有下劃線(xiàn)表示,被稱(chēng)為示例元素. 示例元素下劃線(xiàn)上面的值不起作用,被當(dāng)作域變量名稱(chēng)來(lái)對(duì)待,只用于占位或是連接條件。不帶下劃線(xiàn)的則是構(gòu)成實(shí)際條件一部分的值。
關(guān)系運(yùn)算的安全性
安全性的概念
不產(chǎn)生無(wú)窮演算和無(wú)窮驗(yàn)證的運(yùn)算被稱(chēng)為是安全的
關(guān)系代數(shù)和關(guān)系演算的安全性
關(guān)系代數(shù)是安全的
關(guān)系演算是不一定安全的
安全約束有限集合(DOM)
需要對(duì)關(guān)系演算施加約束條件,即任何公式都在一個(gè)集合范圍內(nèi)操作,而不是無(wú)限范圍內(nèi)操作,才能保證其安全性。
DOM(ρ)是一個(gè)有限集合,其中每個(gè)符號(hào)要么是ρ明顯出現(xiàn)的符號(hào),要么是出現(xiàn)在ρ中的某個(gè)關(guān)系R的某元組的分量。
DOM主要用于約束ρ中一些謂詞的計(jì)算范圍,它不必是最小集合。