數據庫復習
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的自然連接為:
(3)除操作
定義關系模式
用全然的關系代數表示為:
(4)聚合操作
聚合函數定義如SQL。包含了avg、min、max、sum、count等,形式化的關系代數聚合操作為:
當中
group by。
8.3 關系代數數據庫改動
(1)刪除
刪除操作的形式化定義為
(2)插入
插入操作的形式化定義為
(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較為類似,略
