1 關系數據結構及形式化定義
1.1 關系
單一的數據結構----關系
現實世界的實體以及實體間的各種聯系均用關系來表示
域是一組具有相同數據類型的值的集合。
笛卡爾積給定一組域D1, D2, …, Dn,這些域中可以有相同的。
笛卡爾積中每一個元素(d1, d2, …, dn)叫作一個n元組(n-tuple)或簡稱元組(Tuple)
笛卡爾積元素(d1, d2, …, dn)中的每一個值di叫作一個分量
笛卡爾積的表示方法
笛卡爾積可表示為一個二維表
表中的每行對應一個元組,表中的每列對應一個域
D1×D2×…×Dn的子集叫作在域D1, D2, …, Dn上的關系,表示為R(D1, D2, …, Dn) R:關系名 n:關系的目或度(Degree)
關系也是一個二維表,表的每行對應一個元組,表的每列對應一個域
碼
候選碼(Candidate key)
若關系中的某一屬性組的值能唯一地標識一個元組,則稱該屬性組為候選碼
簡單的情況:候選碼只包含一個屬性
全碼(All-key)
最極端的情況:關系模式的所有屬性組是這個關系模式的候選碼,稱為全碼(All-key)
主碼
若一個關系有多個候選碼,則選定其中一個為主碼(Primary key)
主屬性
候選碼的諸屬性稱為主屬性(Prime attribute)不包含在任何侯選碼中的屬性稱為非主屬性(Non-Prime attribute)或非碼屬性(Non-key attribute)
三類關系
基本關系(基本表或基表)
查詢表
視圖表
1.2 關系模式
關系模式(Relation Schema)是型
關系是值
關系模式是對關系的描述
關系模式可以形式化地表示為:
R(U, D, DOM, F)
R 關系名
U 組成該關系的屬性名集合
D 屬性組U中屬性所來自的域
DOM 屬性向域的映象集合
F 屬性間的數據依賴關系集合
關系模式通常可以簡記為:
R(U) 或R(A1, A2, …, An)
R: 關系名
A1, A2, …, An : 屬性名
關系模式與關系
關系模式
對關系的描述
靜態的、穩定的
關系
關系模式在某一時刻的狀態或內容
動態的、隨時間不斷變化的
1.3 關系數據庫
在一個給定的應用領域中,所有關系的集合構成一個關系數據庫
關系數據庫語言的分類
- 關系代數語言 用對關系的運算來表達查詢要求 代表: ISBL
- 關系演算語言:用謂詞來表達查詢要求 代表: ALPHA, QUEL
- 域關系演算語言 謂詞變元的基本對象是域變量 代表: QBE
- 具有關系代數和關系演算雙重特點的語言 代表: SQL
2 關系操作
常用的關系操作
查詢:選擇、投影、連接、除、並、交、差
數據更新:插入、刪除、修改
查詢的表達能力是其中最主要的部分
選擇、投影、並、差、笛卡爾基是5種基本操作
關系操作的特點 :集合操作方式:操作的對象和結果都是集合,一次一集合的方式
3 關系的完整性
關系的三類完整性約束
實體完整性
實體完整性規則(Entity Integrity)若屬性A是基本關系R的主屬性,則屬性A不能取空值
實體完整性規則的說明
(1) 實體完整性規則是針對基本關系而言的。一個基本表通常對應現實世界的一個實體集。
(2) 現實世界中的實體是可區分的,即它們具有某種唯一性標識。
(3) 關系模型中以主碼作為唯一性標識。
(4) 主碼中的屬性即主屬性不能取空值。
主屬性取空值,就說明存在某個不可標識的實體,即存在不可區分的實體,這與第(2)點相矛盾,因此這個規則稱為實體完整性
參照完整性
1. 關系間的引用
在關系模型中實體及實體間的聯系都是用關系來描述的,因此可能存在着關系與關系間的引用。
2. 外碼
設F是基本關系R的一個或一組屬性,但不是關系R的碼。如果F與基本關系S的主碼K相對應,則稱F是基本關系R的外碼
eg:
選修關系的‚學號‛ 與學生關系的主碼‚學號‛相對應
選修關系的‚課程號‛與課程關系的主碼‚課程號‛相對應
學號和課程號是選修關系的外碼
學生關系和課程關系均為被參照關系
選修關系為參照關系
3. 參照完整性規則
參照完整性規則
若屬性(或屬性組) F是基本關系R的外碼,它與基本關系S的主碼K相對應(基本關系R和S不一定是不同的關系),則對於R中每個元組在F上的值必須為:或者取空值(F的每個屬性值均為空值)或者等於S中某個元組的主碼值
用戶定義的完整性
針對某一具體關系數據庫的約束條件,反映某一具體應用所涉及的數據必須滿足的語義要求
4 關系代數
集合運算
比較運算
專門關系運算符
選擇(Selection)
σF(R)={t|t∈R∧F(t)=‘真'} F:選擇條件,是一個邏輯表達式,基本形式為:X1θY1
投影(Projection)
πA(R) = { t[A] | t ∈R } A: R中的屬性列 投影操作主要是從列的角度進行運算
投影之后不僅取消了原關系中的某些列,而且還可能取消某些元組(避免重復行)
連接(Join)
連接也稱為θ連接
從兩個關系的笛卡爾積中選取屬性間滿足一定條件的元組
A和B: 分別為R和S上度數相等且可比的屬性組
θ:比較運算符
連接運算從R和S的廣義笛卡爾積R×S中選取(R關系)在A屬性組上的值與(S關系)在B屬性組上值滿足比較關系的元組。
兩類常用連接運算
等值連接(equijoin)
從關系R與S的廣義笛卡爾積中選取A、 B屬性值相等的那些元組
自然連接(Natural join)
自然連接是一種特殊的等值連接 ,兩個關系中進行比較的分量必須是相同的屬性組 ,在結果中把重復的屬性列去掉
自然連接還需要取消重復列,所以是同時從行和列的角度進行運算
外連接
如果把舍棄的元組也保存在結果關系中,而在其他屬性上填空值(Null),這種連接就叫做外連接(OUTERJOIN)。
左外連接
如果只把左邊關系R中要舍棄的元組保留就叫做左外連接(LEFT OUTER JOIN或LEFT JOIN)
右外連接
如果只把右邊關系S中要舍棄的元組保留就叫做右外連接(RIGHT OUTER JOIN或RIGHT JOIN)。
除(Division)
給定關系R(X, Y)和S(Y, Z),其中X, Y, Z為屬性組。
R中的Y與S中的Y可以有不同的屬性名,但必須出自相同的域集 R與S的除運算得到一個新的關系P(X), P是R中滿足下列條件的元組在X屬性列上的投影: 元組在X上分量值x的象集Yx,包含S在Y上投影的集合。
Yx: x在R中的象集, x=tr[X]
除操作是同時從行和列角度進行運算
eg:設關系R、 S分別為下圖的(a)和(b), R÷S的結果為圖(c)