關系數據結構
笛卡兒積:給定一組集合D1,D2,…,Dn,這些集合可以相同, 定義D1,D2,…,Dn 的笛卡爾積為:D1×D2×…×Dn={(d1,d2,…,dn) | diÎDi,i=l,2,…,n},其中的每一個元素(d1,d2,…,dn)叫做一個n元組,元素中第i個值di叫做第i個分量。
關系:笛卡爾積D1×D2×…×Dn的任一個子集稱為 D1,D2,…,Dn 上的一個關系。關系是元組的集合,亦即實 體的集合。
域:集合 D1,D2,…,Dn是關系中元組的取值范圍,稱為關系的域。關系中的每一列對應一個域,也稱為關系的屬性,不同的列可以有相同的域,列名對應域名,即屬性名。
度:集合 D1,D2,…,Dn的n為關系的度。
候選鍵:能唯一地標識出一個元組的屬性或屬性組。
聯合鍵:兩個或兩個以上屬性組成的候選鍵。
全鍵:關系的全部屬性構成關系的唯一候選鍵。該關系稱為全鍵關系(All-Key Relation)
主鍵:在關系的多個候選鍵中選擇的一個候選鍵,用它作為元組的唯一標示。在一個關系中只能有一個主鍵。
外鍵:關系R中的一組屬性A不是關系R的主鍵,但A是另一個關系S的主鍵,則屬性組A就是關系R的外鍵。
關系模式:若U={A1, A2 …, An}為關系R的屬性集,則關系模式簡記為R(U)或R(A1, A2, …, An)
完整性規則
實體完整性規則:關系中每個元組的主鍵屬性對應的各個分量不能為空值。
參照完整性規則:設屬性組A是關系R的外鍵且A又是關系S的主鍵,則對於R中的每一個元組在屬性A上的值必須為:空值或者等於S中某一個元組的主鍵值。
實體完整性和參照完整性都是關系模型必須滿足的完整性約束條件,這些約束條件由RDBMS自動支持。
用戶定義的完整性:用戶根據具體應用而對數據附加的約束條件。
關系代數中傳統的集合運算
關系R與S是相容的: 若關系R和S滿足:R和S具有相同的度;R中的第i個屬性和S中的第i個屬性定義在同一個域上。
並運算: R∪S;差運算:R-S;交運算:R∩S
廣義笛卡爾積:設R為m元關系,S為n元關 系,則R與S的廣義笛卡爾積R×S是一個(m+n) 元關系,其中的每個元組的前m個分量是R中的一個元組,后n個分量是S中的一個元組。若R有k1個元組,S有k2個元組,則R×S有(k1×k2)個元組,即廣義笛卡爾積。
關系代數中專門的集合運算
選擇運算:從關系Students中選取所有的男生,其關系運算表達式為:σSsex='男'(Students)
投影運算:選取學生關系Sudents中的所有Sname(姓名),Sage(年齡)和Class(班級),其關系運算表達式為:∏Sname, Sage, Class(Students)
連接運算:θ為算術比較符,從二個關系的廣義笛卡爾 積中選取滿足一定連接條件的元組。
自然連接:兩個關系進行連接比較的屬性列完全相同的等值連接,且結果關系中沒有重復的屬性,R S=ΠB(σR.A=S.A(R×S)),B=ARUAS
除法運算:
T=Π1,2,…,n-m(R)
W=(T×S)-R (計算T×S中不在R中的元組)
V=Π1,2,…,n-m(W)
R÷S=T-V
【查詢選修了'英語' 課程的學生姓名】
【檢索選修了所有課程的學生編號和姓名】
SELECT Sname,Sno
FROM Students WHERE NOT EXISTS
(SELECT * FROM Courses WHERE NOT EXISTS
(SELECT * FROM Reports WHERE
SNO=Students.Sno AND Cno=Course.Cno))
元組關系演算
表達式的一般形式為{ t | α(t)},它是使α(t)為真的所有元組t構成的集合。其中,t是元組變量,α(t)是元組關系演算公式(簡稱公式),它由原子公式和運算符組成。
S-學生表、R-成績表、C-課程表
【檢索班級編號為'199902'的全班學生的學號】
{t[1] | S(t)∧t[5]='199902'}
【查詢選修了'英語' 課程的學生姓名】
{t[2] | S(t)∧ヨu(R(u)∧u[1]= t[1]∧ヨv(C(v)∧v[1]=u[2]∧v[2]='英語'))}
{t[2] | S(t)∧ヨuヨv (R(u)∧C(v)∧u[1]= t[1]∧v[1]=u[2]∧v[2]='英語')}
【檢索選修了所有課程的學生】
{t | S(t)∧∀v(C(v)∧ヨu(R(u)∧u[2]=v[1]∧u[1]=t[1]))}
域關系演算
【檢索班級編號為'199902'的全班學生的學號】
{t1 | S(t1, t2, t3, t4, t5)∧t5='199902'}}
【查詢選修了'英語'課程的學生名】
{t2 | S(t1, t2, t3, t4, t5)∧ヨu1ヨu2ヨv1ヨv2(R(u1, u2, u3)∧C(v1, v2,v3)∧t1=u1∧u2=v1∧v2='英語')}
【檢索選修了所有課的學生】
{(t1, t2, t3, t4, t5) | S(t1, t2, t3, t4, t5)∧ヨv1ヨu1ヨu2(R(u1, u2, u3)∧C(v1, v2, v3)∧u2=v1∧u1=t1)}
關系運算的安全限制
無限關系:當元組變元t中某一屬性的定義域是無限時,如表示所有不在關系R中的元組的集合{t | ┐R(t)}。
無窮驗證過程:t的取值范圍為無限,如驗證(∀t)(ω(t))為真的過程。
安全表達式:不產生無限關系和無窮驗證過程的表達式。
安全限制:為保證所有表達式都是安全表達式所采取的限制措施。
關系代數運算是安全的:當給定的所有關系是有限時,其運算的有限次復合不會出現無限關系和無窮驗證。
等價:關系代數、安全的元組關系演算和安全的域關系演算的表達能力是等價的,可以相互轉換。
安全限制方法:
定義一個ψ的有限符號集合,記作DOM(ψ)(不必是最小集合),它由以下兩類符號構成:
ψ中的常量符號;
ψ中涉及的所有關系的所有元組的各個分量值。
這樣,把{t | ┐R(t)}和(∀t)(ω(t))中的t都全部限制在DOM(ψ)中取值,就不會出現無限關系和無窮驗證過程,這時關系演算是安全的。
【關系R如右,求元組演算表達式S={t | ┐R(t)}】
令DOM(ψ)=∏A(R)∪∏B(R)∪∏C(R)={a, b, 1, 3, 7, 8},則結果關系:
S={ t | ┐R(t)}=DOM(ψ)×DOM(ψ)×DOM(ψ)-R。因此,由於有DOM(ψ)的安全限制,關系S中有216-2=214 個元組,故是有限的。
查詢優化
途徑:
代數優化:對查詢語句進行變換,只改變其基本操作順序提高查詢效率,但不涉及存取路徑。
物理優化:根據系統提供的存取路徑,比如順序或索引等來選取較好查詢方案。
規則優化:根據一些啟發式規則,如先做選擇、投影,再做連接操作等來選擇較好的查詢方案。
代價優化:在規則基礎上,對所提供的查詢方案進行執行代價估算,選擇代價最小的查詢方案。
執行代價:
在集中式數據庫中,查詢的執行代價為:總代價=I/O代價+CPU代價
在多用戶環境下查詢的執行代價為:總代價=I/O代價+CPU代價+內存代價
查詢優化策略(啟發式規則):
選擇運算應盡早執行
把投影運算和選擇運算同時進行
把投影操作與它前面或后面的一個雙目運算結合起來
在執行連接運算之前,可對需要連接的關系進行適當地預處理,如建索引或排序
把笛卡爾乘積和其后的選擇運算合並成為連接運算
存儲公用子表達式
查詢優化的等價公式:
- 笛卡兒積、自然連接和條件連接都滿足交換律和結合律
- 投影運算的串接:
- 選擇運算的串接:
- 選擇運算與投影運算交換:
- 選擇運算與笛卡爾積交換:
設F中涉及的屬性都是E1的屬性:
如果F=F1∧F2,且F1只涉及E1的屬性,F2只涉及E2的屬性:
如果F= F1∧F2 ,且F1只涉及E1的屬性,F2涉及E1和E2兩者的屬性:
投影運算與笛卡爾積交換:
設E1、E2是兩個關系代數表達式,A1,A2,…,An是E1的屬性,B1,B2,…,Bm是E2的屬性
查詢優化的步驟:
- 把查詢要求轉換成某種內部表示 ;
如關系代數語法樹;
- 把語法樹轉換成某種優化形式;
利用關系代數等價公式的優化算法
- 選擇低層的存取路徑;
查詢優化器根據數據字典獲得當前數據庫
- 狀態的信息
生成多個查詢計划,選擇代價最小的去完成查詢任務。
【】