数据库原理及应用1
-
1、假设教学数据库包括四个关系:教师关系T(Tno, Tname, Title),分别表示教师号、教师姓名和职称;课程关系C(Cno, Cname, Tno),分别表示课程号、课程名和任课教师号;学生关系S(Sno, Sname, Age, Sex),分别表示学号、姓名和性别;选课关系SC(Sno, Cno, Score),分别表示学号、课程号和成绩,下划线属性(组)为关系的主键,回答以下问题。(20分,每题4分)
(1)请对课程表C的Cno属性和SC表的Cno属性的数据类型给出一个合理的方案,并给出简单说明;
(2)结合选课关系SC说明主键(Sno, Cno)的含义;
(3)课程关系C的Tno属性是一个外键, 请结合实际情况说明该外键的取值约束;
(4)根据设计的选课关系SC的属性构成,推测课程C实体和学生S实体之间的联系类型(1:1, 1:N,M:N),并给适当说明。
(5)如果成绩采用百分制,则给score属性给出合适的数据类型和恰当的取值约束。 -
参考答案:
(1)请对课程表C的Cno属性和SC表的Cno属性的数据类型可以同时为int类型,要保证一致,因为表的Cno属性是外键,取值要参照SC表主键
(2)(Sno, Cno)表示它们的值在sc表中具有唯一性,唯一标识一条选课元组;
(3)课程关系C的Tno属性是一个外键,参照T表的Tno,表示课程表的授课老师编号的取值要么为空,表示尚未分配教师;或者参照教师关系的Tno的主键取值,表示是某位系统中已有的教师任课;
(4)课程C实体和学生S实体之间的联系类型应该是多对多的联系;则产生的选课关系是独立的,并且包含两端实体的主键sno和cno。
(5)score属性可以给int, 并给一个check(score>=0 and score<=100)。 -
2、(1) 举例并简要说明数据库事务的原子性的含义。(6分)
(2) 在无检查点情形下, 结合日志文件说明系统故障的恢复步骤。(6分) -
参考答案:
(1)所谓事务的原子性就是一个事务的若干数据库操作要么全做,要么全不做,避免数据库的数据错误。比如银行从A账号转账10000元到B账号,对于数据库来说,至少有以下几个动作: A账号余额减去10000元,B账号余额增加10000元,因为这两个动作在业务上是一个整体,可以定义这两个动作为一个事务。这样就保证这两个动作要么全做,要么全不做。
(2)从后往前扫描日志文件,找到故障发生时已经提交的事务放入重做队列;同时找出故障发生时未提交的事务记入撤销队列;对撤销队列中的每个事务进行撤销处理,具体:反向扫描日志,对每个要撤销的事务进行回退操作;对重做队列中的每个事务进行重做,具体:正向扫描日志,对每个要重做的事务的每个操作重新执行日志文件中登记的操作; -
3、考虑一个艺术品数据库包括以下3个关系:
艺术家关系:
artist(artistid, artist_name, sex,birthday,artist_introduction),表示艺术家id、艺术家姓名、性别、艺术家生日、术家简介;
艺术品关系
art_work(art_work_id, art_work_name, art_typeid,artistid,art_work_material,art_work_creation_time,common_price,owner),表示艺术品id、艺术品名称、艺术品类型id、艺术品作者id、艺术品材料、艺术品创作时间、转让价格、艺术品藏家姓名;
艺术品类型关系
art_type(art_typeid, art_type_name),表示艺术品类型id、艺术品类型名称;
假设每个关系里已经存放相应的数据,用SQL语句完成以下功能:(32分)
(1)假设关系artist和art_type已经建好,要求创建关系art_work,语句中需要指定Primary key和foreign key,为每一个属性指定合理的数据类型,如果需要指定合适的约束;(4分)create table art_work (art_work_id int, art_work_name varchar(20),
art_typeid int, artistid int, art_work_material varchar(20),
art_work_creation_time datetime, common_price double, owner
varchar(20), primary key(art_work_id), foreign key(artistid)
references artist(artistid), foreign key(art_typeid) references
art_type (art_typeid) );(2)新增一个艺术家记录(100, “王芳”, “女”, “1985-03-10”); (4分)
insert into artist values(100, “王芳”, “女”, “1985-03-10”,null);
(3)显示所有姓"王"的女画家的姓名和生日;(4分)
select artist_name, birthday from artist where sex=”女” and artist_name
like ‘王%’;(4)列出“1970-01-01”之后出生的年轻画家创作的艺术品名称;(4分)
select artist__work_name from artist, art_work where birthday
=”1970-01-01” and artist. artistid= art_work. artistid;
(5)列出在本世纪之前创作的艺术品名称和作者名称;(4分)
select artist_work_name, artist_name from artist, art_work where
art_work_creation_time <”2000-01-01” and artist. artistid= art_work.
artistid;(6)修改全部油画(“油画”为一种艺术品类型名称)的转让价格为原来的1.5倍;(4分)
update art_work set common_price= common_price*1.2 where art_typeid
in(select art_typeid from art_type where art_type_name=”油画”);(7)列出所有艺术家姓名和每个人创作的艺术品总件数;(4分)
select artist_name,count(*) from artist, art_work where artist.
artistid= art_work. Artistid group by artist. artistid;(8)列出至少有10件作品的艺术品类型名称及艺术品件数;(4分)
select art_type_name,count() from art_type, art_work where artist.
art_typeid = art_work. art_typeid group by art_type_name having
count() >=10 ; -
3、假设关系模式R =(A,B,C,D,E,F)的函数依赖集为F={AB,BD,DE,CE, EF},
(1)求出R的候选关键字,写出简单过程; (3分)
(2)判断R属于第几范式并说明原因;(4分)
(3)若模式分解为p1={ABC,BE,ACD, EF},判断其是否为无损连接分解?给出结果和判断的过程;(6分)
(4)分解p2={ABD,CE, EF}具有函数依赖保持性吗?给出你的答案,并给出判断的理由和 过程。(3分) -
参考答案:
(1)R的候选关键字为AC,因为AC+=ABCDEF
(2)R属于1NF,因为存在非主属性E部分依赖于候选键AC,CE。
(3)
存在两行全a的数据,所以该分解具有无损连接性。
(4) F={AB,BD,DE,CE, EF},分解p2={ABD,CE, EF}
不具有函数依赖保持性。ABD中投影是AB,BD;CE上的投影是CE;EF上投影是EF;
所以并集与原来的F并不等价。所以不具有函数依赖保持性。 -
4、假设银行行业系统需要构建一数据库系统,数据库包括以下实体和联系:
银行实体(Bank): 包括银行编号(BankCode)、银行名称(BankName)、银行总部地址(Addr)、联系电话(Tel);
银行分理处实体(Branch):分理处编号(BranchCode)、分理处名称(BranchName)、分理处地址(BranchAddr);
账号(Account)实体:账号编号(AccountNo)、账号余额(Balance)、账号类型(Type);
客户(Customer)实体:客户编号(CustNo)、客户姓名(CustName)、联系电话(Tel);
贷款(Loan)实体:贷款编号(LoanNo)、贷款金额(LoanMoney)、贷款类型(LoanType)。
每个银行都具有很多分理处,分理处依赖于银行的存在而存在;顾客的账号和贷款都在分理处开设,每个顾客可以在一个分理处开设多个账号,但是只能在一个分理处申请一笔贷款;需要登记开设账号和发放贷款的时间。请完成如下设计:(共20分)
(1)设计E-R图,并在图上注明属性、联系类型和联系名称;(10分)
(2)根据E-R图设计关系模式,包括弱实体,要求设计每一个关系,包括关系名、属性、主键、外键,并给出每个属性的数据类型,若需要给出合理的约束。(10分) -
参考答案:
(1)ER diagram(省略了一些属性)
(2)Bank(BankCode, BankName, Addr,Tel);
Branch(BankCode, BranchCode, BranchName ,Addr);
Account(AccountNo, Balance, Type, BankCode, BranchCode,Opentime);
Loan(LoanNo, LoanMoney, LoanType, BankCode, BranchCode,LoanTime)
Custmer(CustNo, Name, Addr, Phone