數據庫復習9——關系代數和關系演算


數據庫復習


CH8 關系代數

8.1 關系代數

關系代數是SQL之外還有一種描寫敘述數據庫操作的形式化語言,關系變量(表)是關系代數中的基本表達式

關系代數三個重要的形式化定義例如以下:

  • σF(E) :E一個表達式(基本表達式或表達式中間結果)。F是關於E中屬性的斷言,相當於where從句中限制條件(Restrict操作)
  • ΠA(E) :E一個表達式,A是E屬性的子集,相當於select從句(Projection操作)
  • ρX(E) :E一個表達式,X是E表達式結果的重命名

8.2 關系代數操作符

(1)基本算符

F斷言中能夠有邏輯運算符(與或非: ¬ )以及關系運算符( =,>,<,,,

有集合運算符(並、交、差、笛卡爾乘積): ,,,×

左箭頭 為賦值操作

(2)Join操作

定義關系模式R(A,B,C,D)和S(E,B,D)的實例r、s的自然連接為:

rs=Πr.A,r.B,r.C,r.D,s.E(ρr.B=s.Br.D=s.D(r×s))

(3)除操作

定義關系模式 R(A1,...,Am,B1,...,Bn) S(B1,...,Bn) 的實例r、s的除法結果(商)為:

RS={A1,...,Am}r÷s={t|tΠRS(r)us(tur)}

用全然的關系代數表示為:

r÷s=ΠRS(r)ΠRS(ΠRS(r)×sΠRS,S(r))

(4)聚合操作

聚合函數定義如SQL。包含了avg、min、max、sum、count等,形式化的關系代數聚合操作為:

G1,G2,...,GngF1(A1),...,Fm(Am)(E)

當中 G1,G2,...,Gn 是能夠為空的group by Fi 是作用在屬性 Ai 上的聚合函數

8.3 關系代數數據庫改動

(1)刪除

刪除操作的形式化定義為 rrE ,當中r是關系實例,E是關系代數查詢表達式

(2)插入

插入操作的形式化定義為 rrE ,當中r是關系實例,E是關系代數查詢表達式或者常量元組集合

(3)更新

更新用Projection操作賦值給關系變量就可以


CH9 關系演算

9.1 關系演算

關系演算是SQL、關系代數之外的又一種描寫敘述數據庫操作的形式化語言,關系演算基本操作對象是范圍變量(Range Variable,是關系變量/表的邏輯表達的別稱)

關系演算基本的語法為:

1.范圍變量定義
<Range var definition>::= 
RANGEVAR <range var name> RANGES OVER <relational exp commlist>

2.范圍屬性定義
<range attr reference>::= 
<range var name>.<attr reference> [ AS <atrr name> ]

3.布爾表達式
<boolean exp>::= ... all the usual possibilities, together with: | <quantified boolean exp>

4.量化布爾表達式(存在和全部)
<quantified boolean exp>::= 
EXISTS <range var name>(<boolean exp>)| 
FORALL <range var name>(boolean exp>)

5.關系操作
<relational operation>::= <proto tuple>[WHERE <boolean exp>]

6.元組表達式
<proto tuple> ::= <tuple exp>

須要特別注意的是量化布爾表達式

  • EXISTS v(P(v))僅僅要有一個P(v)為真,即為真
  • FORALL v(P(v))須要全部P(v)為真,才為真
  • FORALL v(P(v))等價於NOT EXISTS v(NOT P(v))

9.2 元組演算

關系演算中元組演算就是對元組的操作。簡單的元組演算和SQL十分類似:

// Find supplier numbers and status for suppliers in Paris with status >20

// Define a range variable
RANGEVAR sx RANGES OVER S;

// Where clause implement Restriction&Projection
(sx.s#, sx.status) WHERE sx.city='paris' AND sx.status>20

較為復雜的元組演算引入量化布爾表達式:

// Find supplier names for suppliers who supply all parts.

sx.sname WHERE FORALL px(EXISTS spx(spx.s# = sx.s# AND spx.p# = px.p#))

9.3 其它操作

關系演算其它操作,如聚合函數、集合操作等都和SQL較為類似,略


免責聲明!

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



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