1. 解释下列名词(3*5) (1)无损连接
(2)事务的原子性、一致性、分离性、持久性 事务(transaction):数据库事务(简称事务),是查询或更新数据库内容(数据项)的一个程序执行单元,由有限的数据库数据操作序列构成,这些操作要么全做要么全不做,是一个不可分割的工作单位;它的执行能够保证数据库从一个正确的状态转移到另一个正确的状态。在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序;一个应用程序可以包含多个事务。事务以BEGIN TRANSACTION语句开始,以COMMIT(提交)语句或ROLLBACK(回退或撤消)语句结束。
事务是数据库管理系统执行过程中的一个逻辑单位,由一个有限的数据库操作序列构成。在关系数据库中,一个事务可以是一条SQL语句、一组SQL语句或整个程序;一个应用程序可以包含多个事务。 原子性:指事务的所有操作在数据库中要么全部正确完成,要么什么都不做; 一致性:指当事务完成时,必须使数据库中的所有数据都具有一致的状态; 隔离性:指当多个事务并发执行时,一个事务的执行不能被其他事务干扰;
持久性:指一个事务一旦提交,它对数据库中数据的改变应该是永久性的,即使系统可能出现故障,也应保留这个事务执行的痕迹。
(3)多值依赖
(4)函数依赖集F的闭包F+
设R是一个具有属性集合U的关系模式,F是给定的函数依赖集合,由F推导出的所有函数依赖的集合,称为F的闭包,记作F+。
(5)主键和外键
主键(Primary Key):按照数据库设计的完整性规则,每条记录应当具备惟一性,不和其他记录发生重复和冲突。而可以区别出这种惟一性的一个或多个字段就是主关键字(简称主键)。表中经常有一个列或列的组合,其值能唯一地标识表中的每一行。这样的一列或多列称为表的主键,通过它可强制表的实体完整性。
若关系中的某一属性或属性组的值唯一地表示了一个元组,而且任何真子集均无此性质,则称该属性或属性组为候选键。若一个关系有多个候选键,选定其中一个候选键作为元组标识,则称该候选键为主键。一个关系数据库管理系统的每一个数据表只允许有一个主键,但一个主键可以由单个属性构成(单主键),也可以由多个属性构成(复合主键)。由于主键常用来唯一地标识关系中的元组或行。
外键(Foreign Key):如果公共关键字在一个关系中是主关键字,那么这个公共关键字被称为另一个关系的外键。由此可见,外键表示了两个关系之间的联系。其中,以另一个关系的外键作主关键字的表被称为主表,具有此外键的表被称为主表的从表。外键 (FK) 又称作外关键字,是用于建立和加强两个表数据之间的链接的一列或多列。具有相同基本域的列(字段)可以用来关联数据表,数据库管理系统可以在两个关系的行之间或在相同关系的不同行之间保持一致性。
2.层次/网状模型、关系模型、面向对象数据模型及XML模型的特点及其解决的主要问题。(15分)
3. 给出最小覆盖的定义和计算算法(10分)。
4. (1)当输入一条SQL查询语句时,从语法层面和执行层面两个层面说明DBMS所进行的优化过
- 1 -
程和思想;(2)关系模式R 存储块为1000000,内存可用存储块为120,设计一个将关系R排序后存储的算法,并计算算法的复杂性。(20分)
5. 证明:若并发事务遵守两段锁协议(2PL),则并发事务的调度是可串行化的。(10分)
6. 按照下面要求设计一个企业信息管理系统:每个子公司有多个仓库;同一类物资一般存储在同一类型的仓库中,记录入库、出库、账单等;物资一般由部门调出,需记录其用途和去向。(15分)
(1)根据Cow’Foot规范或IDEF-1X规范设计E-R图,实体数目不少于10个,不得出现分类实体,将实体的主键和外键分别标识清楚;
(2)给出完整的关系模式;
(3)分析所蕴含的函数依赖关系; (4)分别满足第几范式并说明理由。
7. 已知关系模式:学生关系S(Sno,Sname,Sage,Ssex,Saddr),课程关系C(Cno,Cname,Cteacher),学生选课关系SC(Sno,Cno,Scgrade)。其中,S为学生关系,Sno为学号,Sname为姓名,Sage为年龄,Ssex为性别,Saddr家庭住址;C为课程关系,Cno为课程号,Cname为课程名称,Cteacher为任课教师编号,SC为学生选课关系,Sno为学号,Cno为课程号,Scgrade为成绩。
请分别使用关系代数式和SQL语言完成以下查询:(15分) (1)查询学过T01号教师讲授的任何一门课程的学生学号; (2)查询没有学过C02号课程的所有学生学号、姓名和年龄; (3)查询所有C01课程成绩比C02课程成绩高的学生学号; 解: (1)
select sno from sc where cno in (select cno from c where tno='825')
group by sno having count(*)=(select count(*) from c where tno='825')
(2)
select sno,sname,sage from s where sno NOT IN (select sno from sc where cno=’C02’) (3)相关子查询
select sno from sc x,sc y where x.sno=y.sno AND x.cno=’C01’AND y.cno=’C02’AND x.scgrade >y.scgrade
- 2 -
因篇幅问题不能全部显示,请点此查看更多更全内容