构造R1(S#,SNAME, SDEPT, MNAME)和R2(S#,SNAME, GRADE) 在关系R1中,其函数依赖为 S#?SNAME, SDEPT, MNAME SDEPT?MNAME
这里有非主属性MNAME传递依赖于候选键S#,将R1分解为 R11(SDEPT, MNAME)和R12(S#, SNAME, SDEPT),它们和R2都是BCNF
1. 假设某商业集团数据库中有一关系模式R如下:
R (商店编号,商品编号,数量,部门编号,负责人) 如果规定:
(1) 每个商店的每种商品只在一个部门销售; (2) 每个商店的每个部门只有一个负责人; (3) 每个商店的每种商品只有一个库存数量。 试回答下列问题:
(1) 根据上述规定,写出关系模式R的基本函数依赖; (商店编号,商品编号)?部门编号 (商店编号,部门编号)?负责人 (商店编号,商品编号)?数量
(2) 找出关系模式R的候选码;(商店编号,商品编号) (3) 试问关系模式R最高已经达到第几范式?为什么?
因为R中存在着非主属性“”对候选码(商店编号,商品编号) 传递依赖,所以R属于2NF模式集
(4) 如果R不属于3NF,请将R分解成3NF模式集。 将R分解成:R1(商店编号,商品编号,数量,部门编号) R2(商店编号,部门编号,负责人)
9. 设有关系EMP(ENO,ENAME,SALARY,DNO),其中各属性的含义
依次为职工号.姓名.工资和所在部门号,以及关系DEPT(DNO,DNAME,MANAGER),其中各属性含义依次为部门号.部门名称.部门经理的职工号。回答以下各题
(1)试用SQL语句完成以下查询:
列出各部门中工资不低于600元的职工的平均工资。 select DNO,avg(salary) from emp where salary>=60 GROUP BY DNO
(2)写出“查询001号职工所在部门名称”的关系代数表达式。 select dname from dept
where dno =(select dno from emp where eno='001')
关系表达式:∏DNAME(σ ENO=‘001’(EMP??DEPT)) (3)请用SQL语句将“销售部”的那些工资数额低于600的职工的工资上调10%。
16
update emp set salary=salary*1.1salary where eno in (select eno from emp,dept
Where emp.dno=dept.dno and dname='销售部' and salary<600)
(4)有如下关系代数表达式
?ENO(EMP??(?MANAGER?'001'(DEPT)))
请将其转化成相应的SQL语句。
SELECT ENO FROM EMP,DEPT
(WHERE EMP.DNO=DEPT.ENO AND DEPT.MANAGER='001') 10. 设零件生产数据库中有3个基本表:
WORK(WNO,WNAME,WGR_NAME),其属性分别是车间编号、车间名称、车间主任名;
PART(PNO,PNAME,WEIGHT,COLOR),其属性分别是零件编号、零件名称、重量、颜色;
PROD(WNO,PNO,QUNTITY),其属性分别是车间编号、零件编号、生产数量。
(1) 现有关系代数表达式:
ΠWNO(WORK)- Π WNO(σ PNAME=?轴承?(PART PROD)) 试给出此查询语句的语义; 查询不生产轴承的车间编号
(2) 试给出检索在“紧固件1车间”生产的零件的零件名称的关系代数表达式;
ΠPNAME(Π WNO(σ wNAME=‘固定件1车间’(WORK))??PROD??PART)
(3) 试用SQL语句定义WORK表,需说明主键; CREATE TABLE WORK(
WNO CHAR(10) PRIMARY KEY, WNAME CHAR(20) NOT NULL, WGR_NAME CHAR(8) )
(4) 试用SQL语句在关系PART中删除零件名称为“弹簧”的元组; DELECT FROM PART WHERE PNAME='弹簧';
(5) 试用SQL语句定义视图G_PTOTAL(PNO,PROD_T),其中属性分别为零件编号和生产总量。
CREAT VIEW G_PTOTAL(PNO,PROD_T)
AS SELECT PNO,QUNTITY FROM PROD;
11. 设关系模式R(ABCDE),F是R上成立的FD集,F={ A→B,CD→E,B
→D},ρ={AB,AD,CDE}是R的一个分解。
17
(1) 试用Chase过程说明ρ是否是无损分解;
(2) 试求F在ρ的每个模式上的投影,并说明ρ是否保持依赖。
12. 设关系模式R(ABCDE),F是R上成立的FD集,F={ A→B,CE→A,B
→D},ρ={AB,BD,ACE}是R的一个分解。 (1) 试用Chase过程说明ρ是否是无损分解;
(2) 试求F在ρ的每个模式上的投影,并说明ρ是否保持依赖。
13. 设有关系模式R(演员编号,演员姓名,电影名,出演角色,艺术团名,
团长名),如果规定每个演员编号各不相同,演员姓名可以相同,一个演员可参演多部电影,各出演一个角色;每个演员只能属于一个艺术团;每个艺术团只有一个团长。
(1) 试写出关系模式R的基本FD和主键; 演员编号→(演员姓名,艺术团名) (演员编号,电影名)→出演角色 艺术团名→
(2)说明R达到第几范式,并说明理由;
第一范式,关系1(演员编号,电影名)→(出演角色,演员姓名,艺术团名) 关系2演员编号→(演员姓名,艺术团名) 所以关系1属于局部依赖,故是第一范式。
(3) 如果R不是3NF模式,请将R分解为3NF模式集。 R分解为R1(演员编号,演员姓名,艺术团名,团长名) R2(演员编号,电影名,出演角色) {R1,R2}是2NF模式集
再把R1分解为R11(演员编号,演员姓名,艺术团名) R12(艺术团名,团长名)
则{R11,R12,R2}是3NF模式集
14. 设体育比赛数据库中有两个实体集。一是“运动员”实体集,属性有运
动员编号、姓名、年龄、性别等;二是“比赛项目”实体集,属性有项目编号、项目名称、级别等。一个运动员可参加多项比赛,一项比赛有多个运动员参加,一个运动员在某个时间参加一项比赛有一个比赛成绩。 (1) 画出ER图,并在图上注明属性、联系类型、实体标识符; (2) 将ER图转换成关系模型,并说明主键和外键。
年龄姓名性别项目编号项目名称级别运动员运动员编号M参加N比赛项目日期成绩 (2) 将ER图转换成关系模型,并说明主键和外键。 运动员(运动员编号,姓名,年龄,性别) 比赛项目(项目编号,项目名称,级别)
18
参加(运动员编号,项目编号,日期,成绩)
15. 创建学生表Student (sno, sname, sage, ssex, sdept), 列出与95001同岁的同
学的学号,姓名,年龄。加入课程表Course(cno,cname,credit), 学生选课表SC(sno, cno, grade), 查询选修?C01?课程的学生的学号.姓名。找出年龄最小的学生。
16. 现有一系统,需要一个杂费管理的B/S方式的模块。模块要求后台页面
可以增加删除费用类型(餐饮费,燃油费,保险费,电费,水费……),并根据费用类型按照日期管理各笔费用,记录每笔费用产生原因(例如:对于某笔燃油费,记录原因为“去长春调研”),具有查询,删除,修改,添加功能。试设计数据库表结构并用SQL语句表达“2009年度电费总费用”。
数据库表结构 杂费信息表 字段名 杂费编号 杂费类型编号 产生时间 产生原因 费用 杂费类型表
字段名 数据类型 杂费类型编号 字符 杂费名称 字符 说明 主键 数据类型 字符 字符 日期 字符 数字 说明 主键 外键 SQL语句表达“2009年度电费总费用” select sum(费用) as '2009年电费总费用' from 杂费信息,杂费类型
where year(产生时间)='2009' and 杂费名称='电费'
17. 写出下列每条语句或程序段的功能,假定数据库AAA,包括student和score两张
表。
(1)create procedure xxx1 as Begin
select *
19
from student x, score y where x.S#=y.S.# end
显示出AAA库中所以学生的记录信息及选课成绩 (2) create procedure xxx2 As Begin
Select x.S#,x.SNAME,count(*) as 门数 Where x.S#=y.S#
Group by x.S#,x.SNAME end
显示出AAA库中每个学生的学号、姓名等信息及选课门数 (3) ceate procedure xxx3
(@a char(8), @b varchar(10), @c numeric(5,2)) As Begin
Insert into score Values(@a,@b,@c) End
向score表中插入学号为@ a的值、课程名为@b的值、成绩为@c的值的学生成绩记录
创建存储过程,功能是查询指定学生的学号,姓名,性别和班级,姓名由参数传递
create proc p_2( @xm char (8) )
as select 学号,姓名,性别,班号from 学生,班级where学生.班号=班级.班号
and 姓名=@xm go
execute s_1 '/*姓名参数*/'
创建存储过程,功能是查询某门课程的总分和平均分。课程名由参数传递。 Create proc p_3(
@kcm char(16),@pj int output,@zcj int output)
As select sum(成绩) as 总分,avg(成绩) as平均分from 选课,课程where 选课.课程号=课程.课程号 and 课程名=@kcm go
Declare @zcj int,@pj int
Execute s_3 '/*课程名参数*/' ,@pj output,@zcj output Print @zcj Print @pj
创建触发器,功能是当删除学生表的记录时,同步删除选课表中的选课信息。 create trigger t_1 on 学生 after delete as
20
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库数据库期末复习题(4)在线全文阅读。
相关推荐: