資料庫系統概念(第六版)習題答案——第二章關係模型介紹
第二章 關係模型介紹
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 討論過程化和非過程化語言的相對優點。
答:
非過程化語言比較使用者使用友好方便。
過程化語言執行速度肯定是要比非過程化語言快的。