第二章 關係(relation)模型介紹

第一部分 關係數據庫

第二章 關係模型介紹

2.1 關係數據庫的結構

1.關係數據庫由表的集合構成,每個表有唯一的名字。

2.一般來說,表中一行代表了一組之間的一種聯繫。

3.關係(relation)用來代指表,而元組(tuple)代替行,屬性(attribute)代替表中的列。

4.對於關係的每個屬性,都有存在一個允許取值的集合,稱位該屬性的域(domain)。

5.空(null)值是一個特殊的值,表示值未知或者不存在。

2.2 數據庫模式

1.數據庫模式:數據庫的邏輯設計。 相當於高級語言當中的類。
2.數據庫實例:給定時刻數據庫中數據的快照。相當於類的實例。
3.關係實例的內容隨時間發生了變化,但關係模式不長變化。

2.3 碼

1.超碼:某一個能夠唯一標識一條記錄的屬性或屬性集
2.候選碼:某一個屬性組的值能夠唯一的標識一個元組,而其子集不能,則稱該屬性組爲候選碼,候選碼是一類特殊的超碼,包含候選碼的屬性組一定是超碼。
3.主碼:若一個關係中有多個候選碼,則選定其中的一個爲主碼
4.一個關係模式(a)可能在它的屬性中包括另一關係模式(b)的主碼。這個屬性在a上稱作爲參照b的外碼。關係a也被稱爲外碼依賴的參照關係,b叫外碼的被參照關係。

5.參照完整性約束:要求在參照關係中任意元組在特定屬性上的取值必然等於被參照關係某個元組在特定屬性上的取值。

2.4 模式圖

一個含有主碼和外碼依賴的數據庫模式可以用模式圖來表示。

img

2.5 關係查詢語言

查詢語言:是用戶用來從數據庫中請求獲取信息的語言。
分爲:
	過程化語言
	非過程化語言

2.6 關係運算

1.關係代數是以關係爲運算對象的一組高級運算的集合。
2.由於關係定義爲屬性個數相同的元組的集合,因此集合代數的操作就可以引入到關係代數中。
3.關係代數中的操作可以分爲兩類:
	3.1傳統的關係操作,並、差、交、笛卡爾積(乘)、笛卡爾積的逆運算(除);
	3.2擴充的關係操作,對關係進行垂直分割(投影)、水平分割(選擇)、關係的結合(連接、自然連接)等。

2. 7 實踐習題

2.1 考慮圖2-14所示關係數據庫。這些關係上適當的主碼是什麼?

Employee(person-name,  street,  city)
Works(person-name,  company-name,  salary)
Company(company-name,  city)
答:上圖中的所有關係模型,需要所有屬性組合成主碼,因爲任何單個屬性均不是單獨構成主碼的好選擇。

2.2 考慮從instructor的dept_name屬性到department關係的外碼約束,給出對這些關係的插入和刪除的示例,使得它們破壞外碼約束。

在department中,如果同一個繫有兩個以上的樓,那麼就破壞了外碼約束條件。

在instructor中,如果增加了一個department中沒有的系的信息,也同樣破壞了外碼約束。

2.3 考慮time_slot關係。假設一個特定的時間段可以在一週之內出現多次,解釋爲什麼day和start_time是該關係主碼的一部分,而end_time卻不是。

因爲時間段的時間是確定的,確定了start_time就可以推算出end_time,所以end_time不用放在主碼的必要條件選項裏。

2.4 在圖2-1所示instructor的實例中,沒有兩位教師同名。我們是否可以據此斷定name可用來作爲instructor的超碼(或主碼)?

不可以,暫時的名字沒有相同的不代表永遠都所有名字不相同,名字這個東西能容易就會變成相同的。

2.8 習題

2.9 考慮圖2-15所示銀行數據庫。

A. 適當的主碼是什麼?

B. 給出你選擇的主碼,確定適當的外碼。

Branch(branch_name, branch_city,  assets)
Customer(customer_name, customer_street,  customer_city)
Loan(loan_number,  branch_name, amount)
Borrower(customer_name,  loan_number)
Account(account_number, branch_name,  balance)
Depositor(customer_name,  account_number)
主碼:branch_name、customer_name, customer_street,  customer_city、loan_number、customer_name、account_number、customer_name

外碼:branch_name、loan_numbe、customer_name

2.11 解釋術語關係和關係模式在意義上的區別?

關係的概念對應於程序設計語言中變量的概念,而關係模式的概念對應於程序設計語言中類型定義的概念。

我們總會在一種關係模式下創建一個特定的關係用於使用。

2.14 列出在數據庫中引入空值的兩個原因。

A.某個元組的某個屬性未知

B.某個元組的某個屬性不存在

2.15 討論過程化和非過程化語言的相對優點。

非過程化語言比較用戶使用友好方便。

過程化語言運行速度肯定是要比非過程化語言快的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章