学生姓名:COMPSCI351测试1-模型解决方案2020/2021年第二学期计算机科学数据库系统基础知识允许时间:四十五(45)分钟注意:–测试是闭卷。–不允许使用计算器。–尝试本测试中的所有问题。–最多本题满分30分。1数据的关系模型。(a)考虑关系模式Client。它存储客户编号cid、客户名称cname和客户生日cbday。以下关系overClient满足哪些超键?[3分]cidcnamecbdayCatherine01/02/1990Catherine03/04/1986Caleb03/04/1986Solution(两个键为1分;三个正确的超级键为1分;如果没有定义其他内容则为1分):–{cid},–{cid,cname},–{cid,cbday},–{cid,cname,cbday},–{cname,cbday}(b)考虑关系模式Lawyer。它存储律师的号码lno和姓名lname,以及该律师工作的practicelpractice。写下一个单一的关系lrLawyerthat–满足两个键{lno,lname}和{lname,lpractice},–违反所有未包含在上述键中的超级键,并且–具有尽可能少的元组。[4分]一个解决方案(违反{lname}1分,违反{lno,lpractice}1分,满足关键点1分,不引入任何其他东西1分):lnolnamelpracticeHarveyPearsonH??arveySpecterLittMikeSpecterLitt(c)考虑之前的关系模式Laywer,以及具有属性pno、pname和psince的关系模式Partner,表示律师从哪一年开始成为合伙人。写下Lawyer上的单一关系和Partner上的单一关系,满足外键[pno]?Lawyer[lno]和[pname]?Lawyer[lname]onPartner,并且–不满足Partner[pno,pname]?Lawyer[lno,lname](包含依赖)这需要每个元组toverPartner一个元组toverLawyer使得t[pno,pname]=t0[lno,lname]成立,并且-每个元组都有尽可能少的元组尽可能。[3分]一个解决方案(上面每个要点1分)PartnerpnopnamepsinceHarvey2011LawyerlnolnamelpracticeMikePearsonH??arveyPearson2SQL。考虑如下所示的关系数据库模式{Client,Lawyer,Case}:–Client={cid,cname,cbday}withkey{cid}–Lawyer={lno,lname,lpractice}withkey{lno}–Case={cid,lno,date,verdict}withkey{cid,lno,date}和外键?[cid]?Client[cid]?[lno]?Lawyer[lno].(a)写下以下内容的英语描述查询:SELECTc.lno,c.date,COUNT(c.id)AScasesnumberFROMCasecWHEREc.verdict<>'guilty'GROUPBYc.lno,c.dateHAVINGCOUNT(*)>=2;[4分]解决方案(每个1分):–对于每个lno和日期,案件的数量是多少–有lno的律师在日期代表–判决与有罪不同–并且前提是至少有两个案件?(b)在SQL中编写以下查询:Whatistheidofclientst难道他们所有的案子都是由名叫安娜丽丝或安娜梅的律师处理的吗?【3分】解法(前两行1分,WHERE子句包含所有条件的子查询2分):SELECTc.cidFROMCasecWHERENOTEXISTS(SELECT?FROMCasec1,LawyerlWHEREc.cid=c1.cidANDc1.lno=l.lnoANDl.lname<>'Annamae'ANDl.lname<>'Annalise');(c)在SQL中编写以下查询:同一天至少有两名来自Pearson的不同律师?[3分]解决方案(可能有几种不同的解决方案;1分表示正确连接;1.5分表示WHERE子句中的正确条件;0.5分表示SELECT子句中的正确属性):SELECTc.cnameFROMCasec1,Casec2,Clientc,律师l1,律师l2WHEREc1.cid=c.cidANDc2.cid=c.cidANDc1.lno=l1.lnoANDc2.lno=l2.lnoANDl1.lpractice='Pearson'ANDl2.lpractice='Pearson'ANDc1.date=c2.dateANDc1.lno<>c2.lno;3Relation代数。考虑如下所示的关系数据库模式{Client,Lawyer,Case}:–Client={cid,cname,cbday}withkey{cid}–Lawyer={lno,lname,lpractice}withkey{lno}–Case={cid,lno,date,verdict}withkey{cid,lno,date}和外键?[cid]?Client[cid]?[lno]?Lawyer[lno]。仅使用讲座中定义的运算符编写关系代数查询幻灯片。(a)写下以下查询的英文描述:πdate,lno(σverdict=guilty(Case))÷πlno(σlpractice=Pearson(Lawyer))[3marks]Solution(1markeach):–Whatare在Pearson律师事务所工作的每一位律师都卷入了某个被判有罪的案件的日期?(b)用关系代数写出:所有案件都由名为Annalize或Annnamae的律师处理的客户的ID是多少?[3分]解决方案(每个1分):–Q1=πlno(σlname='Annalise'(Lawyer)∪σlname='Annamae'(Lawyer))–Q2=πcid(Case?(Q1./Case))–Q3=πcid(Client)?Q2(c)令状关系代数中的e:同一天由至少两名来自Pearson的不同律师代表的客户的姓名是什么?【4分】解法(各1分):–Q1=δlno7→lno0,verdict7→verdict0(Case)./Case./σlpractice='Pearson'(Lawyer)–Q2=Q1?σlno=lno0(Q1)–Q3=πcid(Q2)./Client–Q4=πcname(Q3)WX:codehelp
