数据库原理与应用习题集(11套)_第1页
数据库原理与应用习题集(11套)_第2页
数据库原理与应用习题集(11套)_第3页
数据库原理与应用习题集(11套)_第4页
数据库原理与应用习题集(11套)_第5页
免费预览已结束,剩余21页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

=1 第1章习题 一、选择题 1下列四项中,不属于数据库系统优点的是( )。 A实现数据共享 B确保数据的安全性与保密性 C控制数据冗余 D数据依赖程序 2数据库系统中,对用户使用的数据视图的描述称为( )。 A概念模式 B内模式 C存储模式 D外模式 3下列四项中,不属于数据库特点的是( )。 A. 数据共享 B. 数据完整性 C. 数据冗余很高 D. 数据独立性高 4数据库的三级模式之间存在着两级映像,使数据库系统具有较高的数据( )。 A相容性 B独立性 C共享性 D一致性 5数据库系统的三级模式结构中,定义索引的组织方式属于( )。 A概念模式B外模式 C逻辑模式D内模式 6. E-R模型属于( )。 A. 概念模型B. 层次模型 C. 网状模型D. 关系模型 7学生社团可以接纳多名学生参加,但每个学生只能参加一个社团,从社团到学生之 间的联系类型是( )。 A. 多对多 B. 一对一 C. 多对一 D. 一对多 8反映现实世界中实体及实体间联系的信息模型是( )。 A. 关系模型 B. 层次模型 C. 网状模型 D. E-R模型 二、设计题 1某医院病房计算机管理中需要如下信息: 科室:科名,科地址,科电话,医生姓名 病房:病房号,床位号,所属科室名 医生:姓名,职称,所属科室名,年龄,工作证号 病人:病历号,姓名,性别,诊断,主管医生,病房号 其中,一个科室有多个病房、多个医生,一个病房只能属于一个科室,一个医生只属 于一个科室,但可负责多个病人的诊治,一个病人的主管医生只有一个。设计该计算机管 理系统的ER图,并注明属性和联系类型。 2假设某公司的业务规则如下: (1)公司下设几个部门,如技术部、财务部、市场部等。 (2)每个部门承担多个工程项目,每个工程项目属于一个部门。 (3)每个部门有多名职工,每一名职工只能属于一个部门。 精选文档 2 (4)一个部门可能参与多个工程项目,且每个工程项目有多名职工参与施工。根据 职工在工程项目中完成的情况发放酬金。 (5)工程项目有工程号、工程名两个属性;部门有部门号、部门名称两个属性;职 工有职工号、姓名、性别属性。 请根据上述规则设计E-R模型。 3. 某公司的业务规则如下: (1)每位职工可以参加几个不同的工程,且每个工程有多名职工参与; (2)每位职工有一个职位,且多名职工可能有相同的职位; (3)职位决定小时工资率,公司按职工在每一个工程中完成的工时,计算酬金; (4)职工的属性有职工号、姓名、职位和小时工资率; (5)工程的属性有工程号和工程名称。 试根据上述业务规则设计E-R模型。 答案: 一、选择题 DDCB DADD 二、设计题 1. 2. 3. 精选文档 3 1 n =2 第3章习题 1学校有若干个系,每个系有若干班级和教研室,每个教研室有若干教师,每名教师 只教一门课,每门课可由多个教师教;每个班有若干学生,每个学生选修若干课程,每门 课程可由若干学生选修。请用E-R图画出该学校的概念模型,注明联系类型,再将E- R模型转换为关系模型。 2工厂生产的每种产品由不同的零件组成,有的零件可用于不同的产品。这些零件由 不同的原材料制成,不同的零件所用的材料可以相同。一个仓库存放多种产品,一种产品 存放在一个仓库中。零件按所属的不同产品分别放在仓库中,原材料按照类别放在若干仓 库中(不跨仓库存放)。请用E- R图画出此关于产品,零件,材料,仓库的概念模型,注明联系类型,再将E- R模型转换为关系模型。 3一个图书馆管理系统中有如下信息: 图书:书号、书名、数量、位置 借书人:借书证号、姓名、单位 出版社:出版社名、邮编、地址、电话、E-mail 其中约定:任何人可以借多种书,任何一种书可以被多个人借,借书和还书时,要 登记相应的借书日期和还书日期;一个出版社可以出版多种书籍,同一本书仅为一个出版 社所出版,出版社名具有唯一性。 根据以上情况,完成如下设计: (1)设计系统的E-R图; (2)将E-R图转换为关系模式; (3)指出转换后的每个关系模式的关系键。 答案 1. 精选文档 4 假定:主码用_ 表示 外码用 表示 该E-R图可以转换为以下关系模式: 学院(院名,地址,成立日期,教师人数,学生人数) 系(系名,系址,系主任,院名) 班级(班号,专业名,入学年份,学生数,班级导师,系名) 学生(学号,姓名,性别,出生日期,联系电话,籍贯,班号) 教研室(教研室名称,教师人数,电话,办公室编号,系名) 教师(教工号,姓名,性别,出生日期,联系电话,教研室名称,课号) 课程(课号,课名,学时,学分,开课学期,必修课否) 选修(学号,课号,成绩) 2. 该E-R图可以转换为以下关 系模式: 产品(产品名,型号,重量,仓库号,数量c) 零件(零件名,规格) 材料(材料编号,名称,仓库号,数量a) 仓库(仓库号,地点,面积,保管员) 产品-零件(产品名,零件名,组装日期b) 零件-材料(材料编号,零件名,生产日期a) 零件-仓库(零件名,仓库号,数量b) 3. 1个M:N的联系必须成为一个独立的关系模 式 7个实体各自为一个关系 模式,6个1:N的联系没有 成为一个独立的关系模式 ,全部合并合并到多方实体 3个M:N的联系必须成为一个独立的关系模 式 4个实体各自为一个关系模式,2个 1:N的联系没有成为一个独立的关 系模式,而是合并合并到多方实体,合 并时包括联系得属性 精选文档 5 该E- R图可以转换为以 下关系模式: 图书(书号,书 名,数量,位置 ,出版社名) 借书人(借书证号,姓名,单位) 出版社(出版社名,邮编,地址,电话,E-mail) 借阅(借书证号,书号,借书日期,还书日期) =3 第5章习题 1试用T- SQL语言创建ZYGL(职员管理)数据库,要求数据文件的初始大小为1MB,最大大小为50M B,增长方式按10%增长;日志文件的初始大小为3MB,按1MB增长。 2试用T-SQL语言修改ZYGL数据库的主数据文件,将增长方式修改为按5MB增长。 3试用T-SQL语言修改ZYGL数据库,为ZYGL增加一个数据文件ZYGLBAK。 4试用T-SQL语言删除ZYGL数据库。 -1. CREATE DATABASE zygl ON (NAME = zygl_Data, FILENAME =E:sqlzygl_Data.MDF , SIZE = 1, MAXSIZE = 30, FILEGROWTH = 10% ) LOG ON (NAME = zygl_Log, FILENAME =E:sqlzygl_Log.LDF , SIZE = 3, FILEGROWTH = 1 ) GO -2 ATLER DATABASE ZYGL MODIFY FILE 精选文档 6 ( NAME =ZYGL_DATA, FILEGROWTH =5 ) -3 ATLER DATABASE ZYGL ADD FILE (NAME =ZYGLBAK , FILENAME =E:sqlzygl_Data1 .NDF , SIZE = 1, MAXSIZE = 50, FILEGROWTH = 10% ) -4 DROP DATABASE ZYGL =4 第6章习题 设计题 现有一个数据库scd,库中包含以下系、学生、班级各表: student(学号,姓名,年龄,班号) class(班号,专业名,系名,入学年份) department(系号,系名) 假设表中将有如下数据: student ( 2008101,张山,18,101; 2008102,李斯,16,102; 2008103,王玲,17,111; 2008105,李飞,19,112 ) class( 101,软件,计算机,2005; 102,微电子,计算机,2006; 111,无机化学,化学,2004; 112,高分子化学,化学,2006 ) department ( 001, 数学; 002, 计算机; 003, 化学 ) 1. 用SQL语言创建以上各数据表,在定义中要求为每一字段(列)选择合适的数据类型和长 度,并设置适当的约束,即声明: 精选文档 7 (1)每个表的主键和所有可能的外键。 (2)学生姓名不能为空。 (3)系部系名不能为空,且唯一。 (4)学生的年龄介于15到40岁之间,默认为18。 2试用SQL语言完成下列功能: (1)学校又新增加了两个系部:一个物理系,编号为006,一个经济系,编号为008 。 (2)将入学年份在2004年以前的班级删除。 (3)学生张山转到111班,请更新相关的表。 (4)为每个学生的年龄增加1岁,请更新相关的表。 3试用SQL语言修改表结构: 由于年龄可以通过出生日期计算而来,对student表删除“年龄”字段,增加一个“出 生日期”字段。(提示:必须先删除对年龄的检查约束,才能删除年龄列) 答案 -1. create database scd go Use scd Go CREATE TABLE department (系号 char(3) PRIMARY KEY, 系名 char(20) not null unique ) Go CREATE TABLE class (班号 char(3) PRIMARY KEY, 专业名 char(20), 系名 char(20) references department(系名) , 入学年份 int ) Go CREATE TABLE student (学号 char(7) PRIMARY KEY, 姓名 char(8) NOT NULL, 年龄 int constraint ck_nl CHECK(年龄 =15 and 年龄=2 5. 将所有学生信息按身高逆序输出。 Select * From xs Order by 身高 desc 6 检索平均成绩在75分以上的学生姓名、性别和专业。 方法一: Select 姓名,性别,专业名 From xs Where 学号 in ( Select 学号 From xs_kc Group by 学号 Having avg(成绩)75) 方法二: Select 姓名,性别,专业名 From xs_kc JOIN xs ON xs.学号=xs_kc.学号 精选文档 10 Group by xs.学号, 姓名,性别,专业名 Having avg(成绩)75 7. 检索“李林”同学不学的课程号。 Select 课程号 From kc Where 课程号 not in ( Select 课程号 from xs, xs_kc Where xs.学号=xs_kc.学号 and xs.姓名=李林) 8. 查询只有两门课不及格的学生姓名。 Select 姓名 From xs Where 学号 in (Select 学号 From xs_kc Where 成绩75) Create view avg75 As Select 姓名,性别,专业名,avg(成绩) From xs_kc JOIN xs ON xs.学号=xs_kc.学号 Group by 姓名,性别,专业名 Having avg(成绩)75 =6 第8章习题 对于数据库scd,库中包含以下系、学生、班级各表: student (学号,姓名,年龄,班号) class(班号,专业名,系名,入学年份) 精选文档 13 department (系号,系名) 请使用T-SQL语言完成以下各题。 1 将student表的班号与姓名这两列组合创建一个升序的非聚集索引。 2 为department表的系名建立一个唯一索引,如果输入了重复的键,将忽略该INSER T或UPDATE语句,并使用填充因子FILLFACTOR 为50%。 3 为数据库scd建立一个默认对象,使其对应于年龄为18,将其绑定到student表的年 龄列上。 4 为数据库scd建立一个规则对象,并将其绑定到学生表的专业名列上,规定专业名 的取值只能为护理学、 地质勘探和考古学之一。 5 修改class表为其建立一个CHECK约束,检查入学年份是否小于2009。 答案 1 将student表的班号与姓名这两列组合创建一个升序的非聚集索引。 Create nonclustered index ix_bj_xm on student (班号 asc , 姓名 asc) 2 为department表的系名建立一个唯一索引,如果输入了重复的键,将忽略该INSER T或UPDATE语句,并使用填充因子FILLFACTOR 为50%。 Create unique index uqix_xm on department (系名 asc) WITH IGNORE_DUP_KEY, FILLFACTOR = 50 3 为数据库scd建立一个默认对象,使其对应于年龄为18,将其绑定到student表的年 龄列上。 Create default d_age as 18 Go Exec sp_bindefault d_age , student.年龄 4 为数据库scd建立一个规则对象,并将其绑定到学生表的专业名列上,规定专业名 的取值只能为护理学、 地质勘探和考古学之一。 Create rule r_zym as zym in (护理学, 地质勘探,考古学) Go Exec sp_bindrule r_zym, student.专业名 5 修改class表为其建立一个CHECK约束,检查入学年份是否小于2008。 Alter table class Add constraint ck_rxnf check (入学年份=80 THEN 学习时间长 WHEN 学时=54 THEN 学习时间一般 ELSE 学习时间短 END FROM KC (2)在CJGL数据库中,使用case函数处理:如果学生的专业是“计算机”,显示热 门,是“通信工程”显示一般,否则显示冷门。 SELECT 学号, 姓名, 专业热度= CASE 专业名 精选文档 15 WHEN 计算机 THEN 热门 WHEN 通信工程 THEN 一般 ELSE 冷门 END FROM xs (3)计算18!=18*17*16*2*1。 DECLARE i int , p bigint SELECT i=1, p=1 WHILE i=18 BEGIN SET p=p*i SET i=i+1 END PRINT 18*17*16*2*1=+CAST(p AS char(20) (4)计算S = 1!+2!+3!+10! DECLARE i int , p bigint, s bigint SELECT i=1, p=1, s=0 WHILE ipjgz*3 BEGIN ROLLBACK TRANSACTION -撤消插入操作 RAISERROR (该工资数据有误,超过平均值三倍,操作已经撤消!, 16, 10) /*返回一个错误信息*/ END GO 8在SQL Server管理平台中打开 ZYGL库的工资表,将001号员工的基本工资分别修改为2600与8600,看触发器的触发反应 。 =9 第10章习题1 在职员管理数据库ZYGL中完成以下操作: 1采用游标的方式将每位员工的津贴提高20。注意津贴的变化对实发工资和应发工资的 影响。 方法一:游标的非CURRENT形式的UPDATE语句 USE ZYGL GO DECLARE id char(3) DECLARE salary_cursor CURSOR FOR SELECT 员工号 FROM 工资表 OPEN salary_cursor FETCH NEXT FROM salary_cursor INTO id WHILE FETCH_STATUS=0 BEGIN 精选文档 21 UPDATE 工资表 SET 津贴=津贴*1.2 WHERE 员工号=id FETCH NEXT FROM salary_cursor INTO id END CLOSE salary_cursor DEALLOCATE salary_cursor SELECT * FROM 工资表 GO 方法二:游标的CURRENT形式的UPDATE语句 USE ZYGL GO DECLARE salary_cursor CURSOR FOR SELECT 津贴 FROM 工资表 OPEN salary_cursor FETCH NEXT FROM salary_cursor WHILE FETCH_STATUS=0 BEGIN UPDATE 工资表 SET 津贴=津贴*1.2 WHERE CURRENT OF salary_cursor FETCH NEXT FROM salary_cursor END CLOSE salary_cursor DEALLOCATE salary_cursor SELECT * FROM 工资表 GO 2采用游标的方式查找每月实发工资最多的员工的姓名。 USE ZYGL GO DECLARE id char(3) DECLARE temp_id char(3) DECLARE salary decimal(9,2) DECLARE temp_salary decimal(9,2) DECLARE name char(8) DECLARE salary_cursor CURSOR FOR SELECT 员工号, 实发工资 FROM 工资表 OPEN salary_cursor FETCH NEXT FROM salary_cursor INTO id , salary SET temp_id=id 精选文档 22 SET temp_salary=salary WHILE FETCH_STATUS=0 BEGIN if salarytemp_salary BEGIN SET temp_salary=salary SET temp_id=id END FETCH NEXT FROM salary_cursor INTO id,salary END CLOSE salary_cursor DEALLOCATE salary_cursor DECLARE staff_cursor CURSOR FOR SELECT 员工号,姓名 FROM 职员表 OPEN staff_cursor FETCH NEXT FROM staff_cursor INTO id , name WHILE FETCH_STATUS=0 BEGIN if id=temp_id BEGIN PRINT 实发工资最高的员工是 +name BREAK END FETCH NEXT FROM staff_cursor INTO id,name END CLOSE staff_cursor DEALLOCATE staff_cursor GO =10 第10章习题2 1-事务回滚实验事务回滚实验 启动一个事务,向ZYGL数据库中插入一名新的员工信息,然后回滚该事务,并验证事 务是否回滚。注意该事务涉及职员表和工资表这两个表的操作,并注意这两个表的操作顺 序。 精选文档 23 USE ZYGL GO BEGIN TRANSACTION INSERT INTO 职员表 VALUES(009,李靖,男,1976-9-1110,02,) INSERT INTO 工资表(员工号,基本工资,津贴,三金扣款) VALUES(009,1 800,720,490.5) SELECT * FROM 职员表 SELECT * FROM 工资表 ROLLBACK GO SELECT * FROM 职员表 SELECT * FROM 工资表 GO 2-事务模式实验事务模式实验 -系统默认状态:set xact_abort off, set implicit_transactions off -【1】- 显式事务方式: use cjgl create table 学生会 (姓名 nchar(4), 性别 nchar(1) check(性别 in (男,女), 职务 nchar(5) go begin transaction insert 学生会(姓名,性别,职务) values (王宏,男,主席) insert 学生会(姓名,性别,职务) values (张柳,女,副主席) insert 学生会(姓名,性别,职务) values (梅里,女,组织部长) rollback -回滚 - 或 COMMIT go select * from 学生会 drop table 学生会 -【2】-隐式事务方式: set implicit_transactions on -启动隐性事务模式 create table 学生会 (姓名 nchar(4), 性别 nchar(1) check(性别 in (男,女), 职务 nchar(5) go 精选文档 24 insert 学生会(姓名,性别,职务) values (王宏,男,主席) insert 学生会(姓名,性别,职务) values (张柳,女,副主席) insert 学生会(姓名,性别,职务) values (梅里,女,组织部长) rollback -回滚 - 或 COMMIT go select * from 学生会 drop table 学生会 -【3】-自动提交事务方式: set implicit_transactions off create table 学生会 (姓名 nchar(4), 性别 nchar(1) check(性别 in (男,女), 职务 nchar(5) go insert 学生会(姓名,性别,职务) values (王宏,男,主席) insert 学生会(姓名,性别,职务) values (张柳,女,副主席) insert 学生会(姓名,性别,职务) values (李响 ,南,体育部长) -出错语句 insert 学生会(姓名,性别,职务) values (高兴,男,宣传文艺部长) -出错语句 insert 学生会(姓名,性别,职务) values (梅里,女,组织部长) go select * from 学生会 drop table 学生会 -【4】 设置了保存点的事务: USE CJGL GO create table 学生会 (姓名 nchar(4), 性别 nchar(1) check(性别 in (男,女), 职务 nchar(5) go set xact_abort off -回滚模式为:有错也继续事务 begin transaction insert 学生会(姓名,性别,职务) values (王宏,男,主席) insert 学生会(姓名,性别,职务) values (张柳,女,副主席) SAVE TRANSACTION Mytran - 保存点 insert 学生会(姓名,性别,职务) values (梅里,女,组织部长) insert 学生会(姓名,性别,职务) values (李响 ,南,体育部长)-出错语句 精选文档 25 insert 学生会(姓名,性别,职务) values (高兴,男,宣传文艺部长)-出错语句 if error 0 -如果上条语句出错 rollback transaction Mytran -回滚到保存点1 else COMMIT TRANSACTION - 提交事务 GO select * from 学生会 drop table 学生会 GO = =11 第11章习题 【1】以管理员身份在SQL Server中完成以下操

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论