數據庫系統概念第六版課後習題-第二章答案

//2.1
person_name,company_name吧,嚴格意義上來說,名字也會有重複的可能,最好還是用Id,
//2.2
假如向instructor中插入(990514,Math,eving,90000),在department中不存在math對應
假如刪除instructor中的(22222,einsten,physics,95000),則在department中至少會有一個physics找不到對應。
這兩種操作都會造成外碼約束,
//2.3
個人覺得,作者的意思是爲什麼day+time中的一個可以作爲主碼,然而單獨一個start_time或者end_time不能作爲主碼。因爲在一週內一個特定的時間段,在不考慮同時開始同時結束的限制下,兩個屬性就能確定一個類
//2.4
可以。在沒有重名的情況下,名字就是能夠唯一確定的一個屬性。
但是如果是全部的教務人員,而非實例,爲了保證一定成功,現實生活中一般不會用教務人員名字作爲確定instrucor的主碼
//2.5
執行笛卡爾積後,執行s_id=ID的選擇運算
顯示出所有符合條件s_id=ID的元組,重複出現的顯示次數
//2.6
a.在takes中選擇出year>=2009的元組,在跟stuent表連接
b.先將stuent表和takes表連接,在進行選擇
c.將stuent和takes表連接後的表,把ID,name,course——id投影
//2.7
∏name(σ city="Mimami"(empylee))
∏name(σ salary>=10000(empylee))
∏name(σcity=“Mimami”∧salary>=10000(empylee))
//2.8
∏branch_name(σbranch_name="Chicago"(branch))
∏ customer_name(σ branch_name=“Download”(customer⋈loan))
//2.9
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
不能。在一位學生只有一個advisor的時候s_id可以作爲主碼,在一對多時,只有a_id也就是advisor的id可以作爲主碼
//2.11
關係的概念對應於程序設計語言中變量的概念,而關係模式的概念對應於程序設計語言中類型定義的概念
//2.12
a. ∏person_name(σcompany_name=First Bank Corporation(employee⋈works))

b. ∏person_name,city(σcompany_name=First Bank Corporation(employee⋈works))

c. ∏person_name,street,city(σcompany_name="First Bank Corporation"(employee⋈works) ∪σsalary>=10000(employee⋈works))
//2.13
 a. ∏loan_number(σamount>10000(loan))

b. ∏customer_name(σbalance>6000(account⋈depositor))

c. ∏customer_name(σbalance>6000(account⋈depositor)∪σbranch_name="Uptown"(account⋈depositor))
 //2.14
a. 數據庫中某個屬性不存在(比如說存在學生沒有手機號碼的情況);

b. 數據庫中某個屬性未提供或未知(比如說有些人填寫了性別而有些人出於隱私考慮不填);
在過程化語言中,用戶指導系統對數據庫進行一系列操作以計算出所需結果。在非過程化語言中,用戶只需描述所需信息,而不用給出獲取該信息的具體過程。因此我們可以看出,過程化語言的運行速度肯定比非過程化語言要來得快,但是過程化語言太過繁瑣,用戶體驗不行;非過程化語言簡單方便,但是犧牲了運行速度。各有優缺吧~

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章