數據庫學習摘記 —— 關系代數和關系演算


關系數據結構

笛卡兒積:給定一組集合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的屬性

查詢優化的步驟:

  • 把查詢要求轉換成某種內部表示 ;

      如關系代數語法樹;

  • 把語法樹轉換成某種優化形式;

      利用關系代數等價公式的優化算法

  • 選擇低層的存取路徑;

           查詢優化器根據數據字典獲得當前數據庫

  • 狀態的信息

           生成多個查詢計划,選擇代價最小的去完成查詢任務。

  

   

  

  

   

  

   

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM