1. 程式人生 > >資料庫系統概念(第六版)習題答案——第二章關係模型介紹

資料庫系統概念(第六版)習題答案——第二章關係模型介紹

第二章 關係模型介紹

Employee(person-name,  street,  city)

Works(person-name,  company-name,  salary)

Company(company-name,  city)

圖2-14    習題2.1,  2.7,  2.12的關聯資料庫

實踐習題

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

答:

       上圖中的所有關係模型,需要所有屬性組合成主碼,因為任何單個屬性均不是單獨構成主碼的好選擇。

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.5 先執行student和advisor的笛卡兒積,然後在結果上執行基於謂詞s_id = ID的選擇運算,最後的結果是什麼?(採用關係代數的符號表示,此查詢可寫作。)

答:

       首先笛卡爾積描述了每個學生和所有老師的關係,

       然後ID應該是表示學生的ID,s_id代表什麼,現在為止,所以不好作答。

2.6 考慮下面的表示式,哪些使用了關係代數運算的結果來作為另一個運算的輸入?對於每個表示式,說明表示式的含義。

A 。 在takes關係中找出它裡面的year屬性大於等於2009的,然後在於student關係自然連線。

B 。將takes關係與student關係自然連線,然後篩選出新表格中的year屬性中year大於等於2009的。

C 。先將takes關係與student關係自然連線,然後輸出一個在新關係的基礎上只包含ID,name,course.id屬性的一個新關係。

2.7 考慮圖2-14所示關係資料庫。給出關係代數表示式來表示下列每一個查詢:

A. 找出居住在“Miami”城市的所有員工姓名。

B. 找出工資在100000美元以上的所有員工姓名。

C. 找出居住在“Miami”並且工資在100 000美元以上的所有員工姓名。

答:答案見筆記本

2.8考慮圖2-15所示銀行資料庫。對於下列每個查詢,給出一個關係代數表示式:

A. 找出位於“Chicago”的所有支行名字。

B. 找出在支行“Downtown”有貸款的所有貸款人姓名。

答:答案見筆記本

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)

圖2-15 習題2.8, 2.9, 2.13的銀行資料庫

習題

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)

2.10 考慮圖2-8 所示advisor關係,advisor的主碼是s_id。假設一個學生可以有多位指導老師。那麼,s_id還是advisor關係的主碼嗎?如果不是,advisor的主碼會是什麼呢?

答:

       S_id是什麼,如果是老師編號,那麼當然可以做主碼啦。

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

答:

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

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

2.12 考慮圖2-14所示關係資料庫。給出關係代數表示式來表示下列每一個查詢:

A. 找出為“FirstBank Corporation”工作的所有員工姓名。

B. 找出為“FirstBank Corporation”工作的所有員工的姓名和居住城市。

C. 找出為“FirstBank Corporation”工作且掙錢超過10000美元的所有員工的姓名、街道地址和居住城市。

答:答案見筆記本

2.13 考慮圖2-15所示銀行資料庫。對於下列每個查詢,給出一個關係代數表示式:

A. 找出貸款額度超過10000美元的所有貸款號。

B. 找出所有這樣的存款人姓名,他擁有一個存款額大於6000美元的賬戶。

C. 找出所有這樣的存款人姓名,他在“Uptown”支行擁有一個存款額大於6000美元的賬戶。

答:答案見筆記本

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

答:

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

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

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

答:

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

       過程化語言執行速度肯定是要比非過程化語言快的。