Ans: 如图2.1中带下划线的码。(emmmm,发现答案不是很靠谱。比如员工的名字有重名的现象,显然name不能作为主码。但其实name+street+city也可能会有碰巧一样的情况。所以严格来说,这几张表的结构不是很好,项目中最好还是用id作为主键会比较好。)
Ans: a. 往instuctor表中插入一个元组:(10111, Ostrom, Economucs, 110,000),而department表中没有Economics这个院系。这会破坏外码约束。
b. 从depaerment表中删除一个元组:(Bioology, Watson, 90000), 而至少有一个学生或者教员元组的depart_name是Biology。这会破坏外码约束。
Ans: day和start_time属性是主码的一部分是因为很有可能在不同的日期甚至是同一天内多次遇到一个特定的类,而end_time不是是因为在特定时间开始的类不可能多次结束。(啥意思呢?表在P24下面,我们来推测一波。当这个时间段出现在多天的时候,显然day是可以区分不同的元组的;而在一天中的多个元组,我们既可以通过start_time其实也可以通过end_time来区分(这里不考虑同时发生同时结束的情况)。那么题目的意思很可能是问为什么day+其中一个time就可以作为主码,但一个time是不能作为主码的原因吧)
Ans: 不行。因为这个教员表的例子比较特殊,普遍情况下不这样(除非这个学校规定两个教员不能用一样的名字,不过这不太可能)。
Ans: 结果属性包含了所有student的属性,后面跟着所有advisor的所有属性(如图)。结果中的元组如下, 对于拥有advisor的每个student,结果都有一行包含学生属性,后跟一个与学生ID属性相同的s_id属性,后跟包含学生顾问ID的i_id属性。没有advisor的studnet将不会出现在结果中。 拥有多个顾问的学生将在结果中显示相应的次数。
a. (σyear>=2009(takes) ⋈ advisor)
b. (σyear>=2009(takes)⋈ student)
c. ∏ID,name,course_id(student⋈takes)
Ans: a. 对于那些在2009年至少选了一门课的学生,把学生信息和所选课程信息一同展示,结果属性如下:
ID, Name, dept_name, tot_cred, course_id, section_id, semester, year, grade
b. 和a一样;选择可在join操作之前完成
c. 只要选了课的学生都会出现在有ID, name, course_id属性的表中。
Ans:
a. 找出位于"Chicago"的所有支行名字。
b. 找出在支行"Downtown"有贷款的所有贷款人姓名.
Ans:
Ans:a. emmm...这样吧,字体加粗的作为主码,加下划线的作为外码吧(当然了,本题也不考虑几个键都相同的情况好吧,考虑最理想化的情况。当然每个人的思量都不一样,考虑不一样结果也不一样)
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)
Ans: emmmm? s_id是student_id的意思?如果是这样那不行!如果是老师的id,那肯定是可以的。题目没说清楚,所以无从知道。
Ans: 关系的概念对应于程序设计语言中变量的概念,而关系模式的概念对应于程序设计语言中类型定义的概念(书上原话)。
Ans: 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))
Ans: 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))(这个可能可以化简?)
Ans: a. 数据库中某个属性不存在(比如说存在学生没有手机号码的情况);
b. 数据库中某个属性未提供或未知(比如说有些人填写了性别而有些人出于隐私考虑不填);
Ans: 在过程化语言中,用户指导系统对数据库进行一系列操作以计算出所需结果。在非过程化语言中,用户只需描述所需信息,而不用给出获取该信息的具体过程。因此我们可以看出,过程化语言的运行速度肯定比非过程化语言要来得快,但是过程化语言太过繁琐,用户体验不行;非过程化语言简单方便,但是牺牲了运行速度。各有优缺吧~