数据库系统概念第六版课后习题-第二章答案

//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. 数据库中某个属性未提供或未知(比如说有些人填写了性别而有些人出于隐私考虑不填);
在过程化语言中,用户指导系统对数据库进行一系列操作以计算出所需结果。在非过程化语言中,用户只需描述所需信息,而不用给出获取该信息的具体过程。因此我们可以看出,过程化语言的运行速度肯定比非过程化语言要来得快,但是过程化语言太过繁琐,用户体验不行;非过程化语言简单方便,但是牺牲了运行速度。各有优缺吧~

 

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