数据库原理答案.doc 27页

  • 353.00 KB
  • 2022-04-22 11:51:47 发布

数据库原理答案.doc

  • 27页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'第二章2.6设有关系R和S:RABCSABC367345257723723443计算R∪S,R-S,R∩S,R×S,π3,2(S),σB<’5’(R),R2<2S,RS。解:R∪SABCR-SABCR∩SABC367367723257257723443443345R×SR.AR.BR.CS.AS.BS.Cπ3,2(S)CB36734554367723322573452577237233457237234433454437232<2σB<’5’(R)ABCR⋈SR.AR.BR.CS.AS.BS.C723723345443R⋈SABC7232.7设有关系R和S:RABSBCabbccbeadebdB10ORDERBY2DESC,1;⑤SELECTSNAMEFROMSWHERES#>ALL(SELECTS#FROMSWHERESNAME=’WANG’)ANDAGEX.S#ANDY.AGE(SELECTAVG(AGE)FROMSWHERESEX=’F’);⑨SELECTSNAME,AGEFROMSWHERESEX=’M’ANDAGE>ALL(SELECTAGEFROMSWHERESEX=’F’);3.8对于下面的关系R和S,试求出下列各种联接操作的执行结果:①RNATURALINNERJOINS②RNATURALRIGHTOUTERJOINS③RRIGHTOUTERJOINSUSING(C) ④RINNERJOINS⑤RFULLOUTERJOINSONfalseRABCSBCDa1b1c1b1c1d1a2b2c2b2c2d2a3b3c3b4c4d4解:①ABCD②ABCD③AR.BCS.BDa1b1c1d1a1b1c1d1a1b1c1b1d1a2b2c2d2a2b2c2d2a2b2c2b2d2nullb4c4d4nullnullc4b4d4④AR.BR.CS.BS.CD⑤AR.BR.CS.BS.CDa1b1c1b1c1d1a1b1c1nullnullnulla1b1c1b2c2d2a2b2c2nullnullnulla1b1c1b4c4d4a3b3c3nullnullnulla2b2c2b1c1d1nullnullnullb1c1d1a2b2c2b2c2d2nullnullnullb2c2d2a2b2c2b4c4d4nullnullnullb4c4d4a3b3c3b1c1d1a3b3c3b2c2d2a3b3c3b4c4d43.12试用SQL更新语句表达对3.2题教学数据库中关系S、SC、C、T的更新操作:①往关系C中插一个课程元组("C8","VC++","T6")。②检索所授每门课程平均成绩均大于80分的教师姓名,并把检索到的值送往另一个已存在的表FACULTY(TNAME)。 ③在SC中删除尚无成绩的选课元组。④把选修LIU老师课程的女同学选课元组全部删去。⑤把MATHS课不及格的成绩全改为60分。⑥把低于所有课程总平均成绩的女同学成绩提高5%。⑦在表SC中修改C4课程的成绩,若成绩小于等于70分时提高5%,若成绩大于70分时提高4%(用两种方法实现,一种方法是用两个UPDATE语句实现,另一种方法是用带CASE操作的一个UPDATE语句实现)。⑧在表SC中,当某个成绩低于全部课程的平均成绩时,提高5%。解:①INSERTINTOCVALUES("C8","VC++","T6");②INSERTINTOFACULTY(TNAME)SELECTDISTINCTTNAMEFROMTXWHERENOTEXIST(SELECT*FROMSC,C,TYWHERESC.C#=C.C#ANDC.T#=T.#ANDX.T#=Y.T#GROUPBYT#,C.C#HAVINGAVG(SECOR)<=80));;③DELETEFROMSCWHERESCOREISNULL;④DELETEFROMSCWHERES#IN(SELECTS#FROMSWHERESEX="F")ANDC#IN(SELECTC#FROMC,TWHEREC.T#=T.#ANDTNAME="LIU");⑤UPDATESCSETSCORE=60WHERESCORE<60ANDC#IN(SELECTC#FROMCWHERECNAME="MATHS");⑥UPDATESCSETSCORE=SCORE*1.05WHERES#IN(SELECTS#FROMSWHERESEX="F")ANDSCORE<(SELECTAVG(SCORE)FROMSC);⑦用两个UPDATE语句实现:UPDATESCSETSCORE=SCORE*1.04WHEREC#="C4"ANDSCORE>70;UPDATESCSETSCORE=SCORE*1.05 WHEREC#="C4"ANDSCORE<=70;(这两个UPDATE语句的顺序不能颠倒。)用一个UPDATE语句实现:UPDATESCSETSCORE=SCORE*CASEWHENSCORE>70THEN1.04ELSE1.05ENDWHEREC#="C4";⑧UPDATESCSETSCORE=SCORE*1.05WHERESCORE<(SELECTAVG(SCORE)FROMSC);3.13设数据库中有三个关系:职工表EMP(E#,ENAME,AGE,SEX,ECITY),其属性分别表示职工工号、姓名、年龄、性别和籍贯。工作表WORKS(E#,C#,SALARY),其属性分别表示职工工号、工作的公司编号和工资。公司表COMP(C#,CNAME,CITY),其属性分别表示公司编号、公司名称和公司所在城市。试用SQL语句写出下列操作:①用CREATETABLE语句创建上述三个表,需指出主键和外键。②检索超过50岁的男职工的工号和姓名。③假设每个职工只能在一个公司工作,检索工资超过1000元的男性职工工号和姓名。④假设每个职工可在多个公司工作,检索在编号为C4和C8公司兼职的职工工号和姓名。⑤检索在“联华公司”工作、工资超过1000元的男性职工的工号和姓名。⑥假设每个职工可在多个公司工作,检索每个职工的兼职公司数目和工资总数.显示(E#,NUM,SUM_SALARY),分别表示工号、公司数目和工资总数。⑦工号为E6的职工在多个公司工作,试检索至少在E6职工兼职的所有公司工作的职工工号。⑧检索联华公司中低于本公司平均工资的职工工号和姓名。⑨在每一公司中为50岁以上职工加薪100元(若职工为多个公司工作,可重复加)。⑩在EMP表和WORKS表中删除年龄大于60岁的职工有关元组。解:①CREATETABLEEMP(E#CHAR(4)NOTNULL,ENAMECHAR(8)NOTNULL,AGESMALLINT,SEXCHAR(1),ECITYCHAR(20), PRIMARYKEY(E#));CREATETABLECOMP(C#CHAR(4)NOTNULL,CNAMECHAR(20)NOTNULL,CITYCHAR(20),PRIMARYKEY(C#));CREATETABLEWORKS(E#CHAR(4)NOTNULL,C#CHAR(4)NOTNULL,SALARYSMALLINT,PRIMARYKEY(E#,C#),FOREIGNKEY(E#)REFERENCESEMP(E#),FOREIGNKEY(C#)REFERENCESCOMP(C#));②SELECTE#,ENAMEFROMEMPWHEREAGE>50ANDSEX="M";③SELECTEMP.E#,ENAMEFROMEMP,WORKSWHEREEMP.E#=WORKS.E#ANDSALARY>1000;④SELECTA.E#,A.ENAMEFROMEMPA,WORKSB,WORKSCWHEREA.E#=B.E#ANDB.E#=C.E#ANDB.C#="C4"ANDC.C#="C8";⑤SELECTA.E#,A.ENAMEFROMEMPA,WORKSB,COMPCWHEREA.E#=B.E#ANDB.C#=C.C#ANDCNAME="联华公司"ANDSALARY>1000ANDSEX="M";⑥SELECTE#,COUNT(C#)ASNUM,SUM(SALARY)ASSUM_SALARYFROMWORKSGROUPBYE#;⑦SELECTX.E#FROMWORKSXWHERENOTEXISTS(SELECT*FROMWORKSYWHEREE#="E6"ANDNOTEXISTS(SELECT* FROMWORKSZWHEREZ.E#=X.E#ANDZ.C#=Y.C#));⑧SELECTA.E#,A.ENAMEFROMEMPA,WORKSB,COMPCWHEREA.E#=B.E#ANDB.C#=C.C#ANDCNAME="联华公司"ANDSALARY<(SELECTAVG(SALARY)FROMWORKS,COMPWHEREWORKS.C#=COMP.C#ANDCNAME="联华公司");⑨UPDATEWORKSSETSALARY=SALARY+100WHEREE#IN(SELECTE#FROMEMPWHEREAGE>50);⑩DELETEFROMWORKSWHEREE#IN(SELECTE#FROMEMPWHEREAGE>60);DELETEFROMEMPWHEREAGE>60;3.14对第3.13题中的关系建立一个有关女职工信息的视图EMP_WOMAN,属性包括(E#,ENAME,C#,CNAME,SALARY)。然后对视图EMP_WOMAN操作,检索每一位女职工的工资总数。(假设每个职工可在多个公司兼职)解:CREATEVIEWEMP_WOMANASSELECTA.E#,A.ENAME,C.C#,CNAME,SALARYFROMEMPA,WORKSB,COMPCWHEREA.E#=B.E#ANDB.C#=C.C#ANDSEX="F";SELECTE#,SUM(SALARY)FROMEMP_WOMANGROUPBYE#;3.15对于3.2题的教学数据库中基本表SC,建立一个视图:CREATEVIEWS_SCORE(S#,C_NUM,AVG_SCORE)ASSELECTS#,COUNT(C#),AVG(SCORE)FROMSCGROUPBYS#;试判断下列查询和更新操作是否允许执行。如允许,写出转换到基本表SC上的相应操作。①SELECT*FROMS_SCORE;②SELECTS#,C_NUMFROMS_SCORE WHEREAVG_SCORE>80;③SELECTS#,AVG_SCOREFROMS_SCOREWHEREC_NUM>(SELECTC_NUMFROMS_SCOREWHERES#="S4");④UPDATES_SCORESETS#="S3"WHERES#="S4";⑤DELETEFROMS_SCOREWHEREC_NUM>4;答:①允许查询。相应的操作如下:SELECTS#,COUNT(C#)ASC_NUM,AVG(SCORE)ASAVG_SCOREFROMSCGROUPBYS#;②允许查询。相应的操作如下:SELECTS#,COUNT(C#)ASC_NUMFROMSCGROUPBYS#HAVINGAVG(SCORE)>80;③允许查询。相应的操作如下:SELECTS#,AVG(SCORE)ASAVG_SCOREFROMSCGROUPBYS#HAVINGCOUNT(C#)>(SELECTCOUNT(C#)FROMSCGROUPBYS#HAVINGS#="S4");④不允许。C_NUM是对SC中的学生选修门数进行统计,在未更改SC表时,要在视图S_GRADE中更改门数,是不可能的。⑤不允许。在视图S_SCORE中删除选修门数在4门以上的学生元组,势必造成SC中这些学生学习元组的删除,这不一定是用户的原意,因此使用分组和聚合操作的视图,不允许用户执行更新操作。第四章4.8设关系模式R(ABCD),F是R上成立的FD集,F={A→B,C→B},则相对于F,试写出关系模式R的关键码。并说明理由。解:R的关键码为ACD。因为从已知的F,只能推出ACD→ABCD。4.10设关系模式R(ABCD)上FD集为F,并且F={AB→C,C→D,D→A}。①试从F求出所有非平凡的FD。②试求R的所有候选键。③试求R的所有不是候选键的超键。解:①从已知的F可求出非平凡的FD有76个。 譬如,左边是C的FD有6个:C→A,C→D,C→AD,C→AC,C→CD,C→ACD。左边是D的FD有2个:D→A,D→AD。左边是AB的FD有12个:AB→C,AB→D,AB→CD,AB→AC,……。感兴趣的读者可以自行把这76个FD写齐。②候选键是能函数决定所有属性的不含多余属性的属性集。根据这个概念可求出R的候选键有三个:AB、BC和BD。③R的所有不是候选键的超键有四个:ABC、ABD、BCD和ABCD。4.13设关系模式R(ABCD),F是R上成立的FD集,F={A→B,B→C},①试写出属性集BD的闭包(BD)+。②试写出所有左部是B的函数依赖(即形为“B→?”)。解:①从已知的F,可推出BD→BCD,所以(BD)+=BCD。②由于B+=BC,因此左部是B的FD有四个:B→φ,B→B,B→C,B→BC。4.14设关系模式R(ABCDE)上FD集为F,并且F={A→BC,CD→E,B→D,E→A}。①试求R的候选键。②试求B+的值。解:①R的候选键有四个:A、E、CD和BC。②B+=BD。4.15设有关系模式R(ABC),其关系r如图4.1所示。①试判断下列三个FD在关系r中是否成立?A→BBC→AB→A②根据关系r,你能断定哪些FD在关系模式R上不成立?ABC123423533图4.1解:①在关系r中,A→B成立,BC→A不成立,B→A不成立。②在关系r中,不成立的FD有:B→A,C→A,C→B,C→AB,BC→A。4.17设关系模式R(ABC)分解成ρ={AB,BC},如果R上的FD集F={A→B},那么这个分解是损失分解。试举出R的一个关系r,不满足mρ(r)=r。解:这个反例r可以举测试时的初始表格:ABCABa1a2b13BCb21a2a3πAB(r)⋈πBC(r)有四个元组:ABCa1a2b13a1a2a3b21a2b13b21a2a3 即mρ(r)≠r。4.19设关系模式R(ABC),F是R上成立的FD集,F={A→C,B→C},试分别求F在模式AB和AC上的投影。答:πAB(F)=φ(即不存在非平凡的FD)πAC(F)={A→C}4.20设关系模式R(ABC),F是R上成立的FD集,F={B→A,C→A},ρ={AB,BC}是R上的一个分解,那么分解ρ是否保持FD集F?并说明理由。答:已知F={B→A,C→A},而πAB(F)={B→A},πBC(F)=φ,显然,分解ρ丢失了FDC→A。4.21设关系模式R(ABC),F是R上成立的FD集,F={B→C,C→A},那么分解ρ={AB,AC}相对于F,是否无损分解和保持FD?并说明理由。答:①已知F={B→C,C→A},而πAB(F)=φ,πAC(F)={C→A}显然,这个分解丢失了FDB→C②用测试过程可以知道,ρ相对于F是损失分解。4.22设关系模式R(ABCD),F是R上成立的FD集,F={A→B,B→C,A→D,D→C},ρ={AB,AC,BD}是R的一个分解。①相对于F,ρ是无损分解吗?为什么?②试求F在ρ的每个模式上的投影。③ρ保持F吗?为什么?答:①用测试过程可以知道,ρ相对于F是损失分解。②πAB(F)={A→B},πAC(F)={A→C},πBD(F)=φ。③显然,分解ρ不保持FD集F,丢失了B→C、A→D和D→C等三个FD。4.23设关系模式R(ABCD),R上的FD集F={A→C,D→C,BD→A},试说明ρ={AB,ACD,BCD}相对于F是损失分解的理由。答:据已知的F集,不可能把初始表格修改为有一个全a行的表格,因此ρ相对于F是损失分解。4.24设关系模式R(ABCD)上FD集为F,并且F={A→B,B→C,D→B}。①R分解成ρ={ACD,BD},试求F在ACD和BD上的投影。②ACD和BD是BCNF吗?如不是,试分解成BCNF。解:①F在模式ACD上的投影为{A→C,D→C},F在模式BD上的投影为{D→B}。②由于模式ACD的关键码是AD,因此显然模式ACD不是BCNF。模式ACD应分解成{AC,AD}或{CD,AD}。但是这个分解不保持FD,丢失了FDD→C或A→C。另外,模式BD已是BCNF。4.25设关系模式R(ABCD),ρ={AB,BC,CD}是R的一个分解。设F1={A→B,B→C},F2={B→C,C→D}。①如果F1是R上的FD集,此时ρ是否无损分解?若不是,试举出反例。②如果F2是R上的FD集呢?解:①据chase过程可知,相对于F1,R分解成ρ是损失分解。据构造初始表的规则,这个反例可以是下面的表格:rABCD1100 01100011对于这个r而言,显然r≠mρ(r)。②据chase过程可知,相对于F2,R分解成ρ是无损分解。4.26设关系模式R(ABCD),F是R上成立的FD集,F={AB→CD,A→D}。①试说明R不是2NF模式的理由。②试把R分解成2NF模式集。答:①从已知FD集F,可知R的候选键是AB。另外,AB→D是一个局部依赖,因此R不是2NF模式。②此时R应分解成ρ={AD,ABC},ρ是2NF模式集。4.27设关系模式R(ABC),F是R上成立的FD集,F={C→B,B→A}。①试说明R不是3NF模式的理由。②试把R分解成3NF模式集。答:①从已知FD集F,可知R的候选键是C。从C→B和B→A,可知C→A是一个传递依赖,因此R不是3NF模式。②此时R应分解成ρ={CB,BA},ρ是3NF模式集。4.28设有关系模式R(职工编号,日期,日营业额,部门名,部门经理),该模式统计商店里每个职工的日营业额,以及职工所在的部门和经理信息。如果规定:每个职工每天只有一个营业额;每个职工只在一个部门工作;每个部门只有一个经理。试回答下列问题:(1)根据上述规定,写出模式R的基本FD和关键码;(2)说明R不是2NF的理由,并把R分解成2NF模式集;(3)进而分解成3NF模式集。解:(1)基本的FD有三个:(职工编号,日期)→日营业额职工编号→部门名部门名→部门经理R的关键码为(职工编号,日期)。(2)R中有两个这样的FD:(职工编号,日期)→(部门名,部门经理)职工编号→(部门名,部门经理)可见前一个FD是局部依赖,所以R不是2NF模式。R应分解成R1(职工编号,部门名,部门经理)R2(职工编号,日期,日营业额)此处,R1和R2都是2NF模式。(3)R2已是3NF模式。在R1中,存在两个FD:职工编号→部门名部门名→部门经理因此,“职工编号→部门经理”是一个传递依赖,R1不是3NF模式。R1应分解成R11(职工编号,部门名)R12(部门名,部门经理)这样,ρ={R11,R12,R2}是一个3NF模式集。 4.29设有关系模式R(运动员编号,比赛项目,成绩,比赛类别,比赛主管)存储运动员比赛成绩及比赛类别、主管等信息。如果规定:每个运动员每参加一个比赛项目,只有一个成绩;每个比赛项目只属于一个比赛类别;每个比赛类别只有一个比赛主管。试回答下列问题:(1)根据上述规定,写出模式R的基本FD和关键码;(2)说明R不是2NF的理由,并把R分解成2NF模式集;(3)进而分解成3NF模式集。解:(1)基本的FD有三个:(运动员编号,比赛项目)→成绩比赛项目→比赛类别比赛类别→比赛主管R的关键码为(运动员编号,比赛项目)。(2)R中有两个这样的FD:(运动员编号,比赛项目)→(比赛类别,比赛主管)比赛项目→(比赛类别,比赛主管)可见前一个FD是局部依赖,所以R不是2NF模式。R应分解成R1(比赛项目,比赛类别,比赛主管)R2(运动员编号,比赛项目,成绩)这里,R1和R2都是2NF模式。(3)R2已是3NF模式。在R1中,存在两个FD:比赛项目→比赛类别比赛类别→比赛主管因此,“比赛项目→比赛主管”是一个传递依赖,R1不是3NF模式。R1应分解成R11(比赛项目,比赛类别)R12(比赛类别,比赛主管)这样,ρ={R11,R12,R2}是一个3NF模式集。4.30设关系模式R(ABCD),在R上有五个相应的FD集及分解:(1)F={B→C,D→A},ρ={BC,AD}(2)F={AB→C,C→A,C→D},ρ={ACD,BC}(3)F={A→BC,C→AD},ρ={ABC,AD}(4)F={A→B,B→C,C→D},ρ={AB,ACD}(5)F={A→B,B→C,C→D},ρ={AB,AD,CD}试对上述五种情况分别回答下列问题:①确定R的关键码。②是否无损分解?③是否保持FD集?④确定ρ中每一模式的范式级别。解:(1)①R的关键码为BD。②ρ不是无损分解。③ρ保持FD集F。④ρ中每一模式已达到BCNF级别。 (2)①R有两个关键码:AB和BC。②ρ是无损分解。③因为πACD(F)={C→A,C→D},πBC(F)=φ(没有非平凡的FD),所以ρ不保持FD,丢失了AB→C。④ρ中两模式均已达到BCNF级别。(3)①R有两个关键码:A和C②ρ是无损分解。③因为πABC(F)={A→BC,C→A},πAD(F)={A→D},所以ρ保持FD。④在模式ABC中,关键码是A或BC,属性全是主属性,但有传递依赖(A→BC,BC→A)。因此模式ABC是3NF,但不是BCNF。而模式AD显然已是BCNF。(4)①R的关键码为A。②ρ是无损分解。③因为πAB(F)={A→B},πACD(F)={A→C,C→D},从这两个依赖集推不出原来的B→C,因此ρ不保持FD,丢失了B→C。④模式AB是BCNF,模式ACD不是3NF,只达到2NF级别。(5)①R的关键码为A。②ρ不是无损分解。③因为πAB(F)={A→B},πAD(F)={A→D},πCD(F)={C→D},从这三个依赖集推不出原来的B→C,因此ρ不保持FD,丢失了B→C。④ρ中每个模式均是BCNF级别。第五章5.13设某商业集团数据库中有三个实体集。一是“商店”实体集,属性有商店编号、商店名、地址等;二是“商品”实体集,属性有商品号、商品名、规格、单价等;三是“职工”实体集,属性有职工编号、姓名、性别、业绩等。商店与商品间存在“销售”联系,每个商店可销售多种商品,每种商品也可放在多个商店销售,每个商店销售一种商品,有月销售量;商店与职工间存在着“聘用”联系,每个商店有许多职工,每个职工只能在一个商店工作,商店聘用职工有聘期和月薪。(1)试画出ER图,并在图上注明属性、联系的类型。(2)将ER图转换成关系模型,并注明主键和外键。解:(1)ER图如图5.1所示。商店编号地址商店名 商店月薪月销售量M1销售聘用聘期NN职工商品商品号规格商品名单价职工编号姓名性别业绩图5.1(2)这个ER图可转换4个关系模式:商店(商店编号,商店名,地址)职工(职工编号,姓名,性别,业绩,商店编号,聘期,月薪)商品(商品号,商品名,规格,单价)销售(商店编号,商品号,月销售量)5.14设某商业集团数据库中有三个实体集。一是“公司”实体集,属性有公司编号、公司名、地址等;二是“仓库”实体集,属性有仓库编号、仓库名、地址等;三是“职工”实体集,属性有职工编号、姓名、性别等。公司与仓库间存在“隶属”联系,每个公司管辖若干仓库,每个仓库只能属于一个公司管辖;仓库与职工间存在“聘用”联系,每个仓库可聘用多个职工,每个职工只能在一个仓库工作,仓库聘用职工有聘期和工资。i.试画出ER图,并在图上注明属性、联系的类型。ii.将ER图转换成关系模型,并注明主键和外键。解:(1)ER图如图5.2所示。公司名地址公司编号 公司1隶属仓库编号N仓库名仓库聘期地址1聘用工资N职工职工编号姓名性别图5.2(2)这个ER图可转换3个关系模式:公司(公司编号,公司名,地址)仓库(仓库编号,仓库名,地址,公司编号)职工(职工编号,姓名,性别,仓库编号,聘期,工资)5.15设某商业集团数据库有三个实体集。一是“商品”实体集,属性有商品号、商品名、规格、单价等;二是“商店”实体集,属性有商店号、商店名、地址等;三是“供应商”实体集,属性有供应商编号、供应商名、地址等。供应商与商品之间存在“供应”联系,每个供应商可供应多种商品,每种商品可向多个供应商订购,每个供应商供应每种商品有个月供应量;商店与商品间存在“销售”联系,每个商店可销售多种商品,每种商品可在多个商店销售,每个商店销售每种商品有个月计划数。试画出反映上述问题的ER图,并将其转换成关系模型。解:ER图如图5.3所示。商店号供应商编号商店名地址供应商名地址 供应商商店MM月计划数销售月供应量供应NN商品商品号商品名规格单价图5.3(2)这个ER图可转换5个关系模式:供应商(供应商编号,供应商名,地址)商店(商店号,商店名,地址)商品(商品号,商品名,规格,单价)供应(供应商编号,商品号,月供应量)销售(商店号,商品号,月计划数)5.18某体育运动锦标赛有来自世界各国运动员组成的体育代表团参赛各类比赛项目。试为该锦标赛各个代表团、运动员、比赛项目、比赛情况设计一个ER模型。解:图5.5是ER图的一种设计方案。参加代表团住所团编号地区成员运动员编号年龄姓名性别1N比赛类别主管类别编号类别名属于比赛项目项目编号级别项目名1N比赛时间得分NM图5.5 5.19假设某超市公司要设计一个数据库系统来管理该公司的业务信息。该超市公司的业务管理规则如下:⑴该超市公司有若干仓库,若干连锁商店,供应若干商品。⑵每个商店有一个经理和若干收银员,每个收银员只在一个商店工作。⑶每个商店销售多种商品,每种商品可在不同的商店销售。⑷每个商品编号只有一个商品名称,但不同的商品编号可以有相同的商品名称。每种商品可以有多种销售价格。⑸超市公司的业务员负责商品的进货业务。试按上述规则设计ER模型解:图5.6是ER图的一种设计方案。具有销售价格N1业务员M库存仓库商品M发货进货MNNNP主管拥有商店收银员1P1N1MN销售经理N图5.65.20试把教材中5.5.2、5.5.3、5.5.4等三小节中的ER模型转换成关系模型,并指出每个关系模式的主键和外键。(1)(教材中P197的5.5.2节)公司车队信息系统的ER模型本例为某货运公司设计了车队信息管理系统,对车辆、司机、维修、保险、报销等信息和业务活动进行管理。其ER图如图5.8所示。图5.8公司车队信息系统的ER模型部门车队司机车辆开销维修公司调用报销拥有聘用保险2保险1M1NN1NNNN11保险公司1N维修该ER图有7个实体类型,其结构如下: 部门(部门号,名称,负责人)车队(车队号,名称,地址)司机(司机号,姓名,执照号,电话,工资)车辆(车牌号,车型,颜色,载重)保险公司(保险公司号,名称,地址)维修公司(维修公司号,名称,地址)开销(顺序号,费用类型,费用,日期,经手人)实体之间有7个联系,其中6个是1:N联系,1个是M:N联系。其中联系的属性如下:调用(出车编号,出车日期,车程,费用,车辆数目)保险1(投保日期,保险种类,费用)保险2(投保日期,保险种类,费用)进而,读者可以很容易地转换成关系模式集。解:根据ER图和转换规则,7个实体类型转换成7个关系模式,1个M:N联系转换成1个关系模式,共8个关系模式,如下:部门(部门号,名称,负责人)车队(车队号,名称,地址)司机(司机号,姓名,执照号,电话,工资,车队号,保险公司号,投保日期,保险种类,费用)车辆(车牌号,车型,颜色,载重,车队号,保险公司号,投保日期,保险种类,费用,维修公司号)保险公司(保险公司号,名称,地址)维修公司(维修公司号,名称,地址)开销(顺序号,车牌号,费用类型,费用,日期,经手人)调用(出车编号,车队号,部门号,出车日期,车程,费用,车辆数目)(2)(教材中P198的5.5.3节)人事管理信息系统的ER模型上海交通电器有限公司设计了人事管理信息系统,其中涉及到职工、部门、岗位、技能、培训课程、奖惩记录等信息。其ER图如图5.9所示。培训课程M选课部门工资享有属于1M1NN设置职工1NMMN奖惩接受岗位聘任考核N1N技能图5.9 这个ER图有7个实体类型,其属性如下:职工(工号,姓名,性别,年龄,学历)部门(部门号,部门名称,职能)岗位(岗位编号,岗位名称,岗位等级)技能(技能编号,技能名称,技能等级)奖惩(序号,奖惩标志,项目,奖惩金额)培训课程(课程号,课程名,教材,学时)工资(工号,基本工资,级别工资,养老金,失业金,公积金,纳税)这个ER图有7个联系类型,其中1个1:1联系,2个1:N联系,4个M:N联系。联系类型的属性如下:选课(时间,成绩)设置(人数)考核(时间,地点,级别)接受(奖惩时间)解:根据ER图和转换规则,7个实体类型转换成7个关系模式,4个M:N联系转换成4个关系模式,共11个模式,如下:职工(工号,姓名,性别,年龄,学历,部门号,岗位编号)部门(部门号,部门名称,职能)岗位(岗位编号,岗位名称,岗位等级)技能(技能编号,技能名称,技能等级)奖惩(序号,奖惩标志,项目,奖惩金额)培训课程(课程号,课程名,教材,学时)工资(工号,基本工资,级别工资,养老金,失业金,公积金,纳税)选课(工号,课程号,时间,成绩)设置(部门号,岗位编号,人数)考核(工号,技能编号,时间,地点)接受(工号,序号,奖惩日期)(3)(教材中P199的5.5.4节)旅游管理信息系统的ER模型上海普教旅行社设计了一个小型的国内旅游管理信息系统,其中涉及到与业务有关的信息有旅游线路、班次、团体、旅客、保险员、导游、宾馆、交通工具等。其ER图如图5.10所示。旅游线路1开设交通工具交通1N1导游陪同旅游班次食宿MN宾馆1M有N保险参加N 旅游团111组成N游客图5.10这个ER图有8个实体类型,其属性如下:旅游线路(路线号,起点,终点,天数,主要景点)旅游班次(班次号,出发日期,回程日期,旅游标准,报价)旅游团(团号,团名,人数,联系人,地址,电话)游客(游客编号,姓名,性别,年龄,身份证号码,住址,电话)导游(导游编号,姓名,性别,年龄,身份证号码,住址,电话,语种,等级,业绩)交通工具(旅游班次号,出发工具,出发日期,出发班次,出发时间,回程工具,回程日期,回程班次,回程时间)宾馆(宾馆编号,宾馆名,城市,星级,标准房价,联系人,职务,地址,电话,传真)保险单(保险单编号,保险费,投保日期)这个ER图有7个联系类型,其中2个1:1联系,3个1:N联系,2个M:N联系。解:根据ER图和转换规则,8个实体类型转换成8个关系模式,2个M:N联系转换成2个关系模式,共10个关系模式,如下:旅游线路(路线号,起点,终点,天数,主要景点)旅游班次(班次号,路线号,出发日期,回程日期,旅游标准,报价)旅游团(团号,旅游班次号,团名,人数,联系人,地址,电话)游客(游客编号,团号,姓名,性别,年龄,身份证号码,住址,电话)导游(导游编号,姓名,性别,年龄,身份证号码,住址,电话,语种,等级,业绩)交通工具(旅游班次号,出发工具,出发日期,出发班次,出发时间,回程工具,回程日期,回程班次,回程时间)宾馆(宾馆编号,宾馆名,城市,星级,标准房价,联系人,职务,地址,电话,传真)保险(保险单编号,团号,人数,保险费,投保日期)陪同(旅游班次号,导游编号)食宿(旅游班次号,宾馆编号)第七章 7.28设教学数据库的关系如下:S(S#,SNAME,AGE,SEX)SC(S#,C#,GRADE)C(C#,CNAME,TEACHER)试用多种方法定义下列完整性约束:⑴在关系S中插入的学生年龄值应在16~25岁之间。⑵在关系SC中插入元组时,其S#值和C#值必须分别在S和C中出现。⑶在关系C中删除一个元组时,首先要把关系SC中具有同样C#值的元组全部删去。⑷在关系S中把某个S#值修改为新值时,必须同时把关系SC中那些同样的S#值也修改为新值。解:这里每个约束用一种方式定义。(1)用检查子句定义:CHECK(AGEBETWEEN16AND25);(2)在关系SC的定义中,用外键子句定义:FOREIGNKEY(S#)REFERENCESS(S#);FOREIGNKEY(C#)REFERENCESC(C#);(3)在关系SC的定义中,用外键子句定义:FOREIGNKEY(C#)REFERENCESC(C#)ONDELETECASCADE;(4)在关系SC的定义中,用外键子句定义:FOREIGNKEY(S#)REFERENCESS(S#)ONUPDATECASCADE;7.29在教学数据库中的关系S、SC、C中,试用SQL的断言机制定义下列两个完整性约束:⑴学生必须在选修MATHS课后,才能选修其他课程。⑵每个男学生最多选修20门课程。解:(1)这个约束可用下列形式表达:不存在一个学生的选课,这个学生没学过MATHS课。这样就能很容易地写出断言:CREATEASSERTIONASSE1CHECK(NOTEXISTS(SELECT*FROMSCXWHERENOTEXISTS(SELECT*FROMSCY,CWHEREY.C#=C.C#ANDY.S#=X.S#ANDCNAME=’MATHS’)));(2)CREATEASSERTIONASSE2CHECK(20>=ALL(SELECTCOUNT(C#) FROMS,SCWHERES.S#=SC.S#ANDSEX=’M’GROUPBYS.S#));'