数据库原理习题

数据库是存放数据的仓库。数据库原理是每个计算机专业的学生必须掌握的课程之一,所以学好数据库原理对日后实际工作和项目十分重要。这篇博客通过总结广州大学数据库原理课程和教材中的例题,希望能够对数据库原理加深理解。

选择

1.数据库系统中的数据模型通常由( A )三部分组成。
A. 数据结构、数据操作和完整性约束
B. 数据定义、数据操作和安全性约束
C. 数据结构、数据管理和数据保护
D. 数据定义、数据管理和运行控制
【分析】:数据模型中一种重要的模型——关系模型
数据结构:二维表格,用“键”导航数据
数据操作:集合操作,存取路径隐蔽
完整性约束:保证数据和语义的正确有效。包括实体完整性、参照完整性和用户定义完整性


2.五种基本关系代数运算是( A )。
A. ∪,-,×,π和σ
B. ∪,-,∞,π和σ
C. ∪,∩,×,π和σ
D. ∪,∩,∞,π和σ
【分析】:五种基本运算
并、差、笛卡尔积、投影、选择
关系代数运算:
并、差、交、笛卡尔积、投影、选择、连接、除
(交、连接、除可以用5种基本运算来表达。引进它们并不增加语言的能力,但可以简化表达。)


3.在关系R和关系S进行自然联接时,只把S中原该舍弃的元组保存到新关系中,这种操作称为( D )。
A. 外联接 B. 内联接 C. 左外联接 D. 右外联接
【分析】:自然连接时舍弃的元组也保存在结果关系中,而在其他属性上填空值


4.下列聚合函数中不忽略空值(null)的是( C )。
A. SUM(列名) B. MAX(列名) C. COUNT( * ) D. AVG(列名)
【分析】:在聚集函数中遇到空值时,除了COUNT(*)外,都跳过了空值而去处理非空值


5.现有一个关系:借阅(书号,书名,库存数,读者号,借期,还期),假如同一本书允许一个读者多次借阅,但不能同时对一种书借多本,则该关系模式的主码是( D )。
A. 书号 B. 读者号 C. 书号 + 读者号 D. 书号 + 读者号 + 借期
【分析】:主码是可以唯一标识元组的,也就是说,可以通过主码中的属性,来推出非主属性。


6.有关系模式R(A, B, C, D, E),根据语义有如下函数依赖集:F={A→B, B→A, (A,C)→D, D→E},下列属性组中的哪一个(些)是R的候选码( B )。
Ⅰ. (A, C) Ⅱ. (A, B) Ⅲ. (B, C) Ⅳ. (A, D) Ⅴ. (A, C, D)A. 只有Ⅰ B. Ⅰ和ⅢC. 只有Ⅴ D. Ⅲ和Ⅳ
【分析】:候选码:若关系中的一个属性或属性组的值能够唯一地标识一个元组,且他的真子集不能唯一的标识一个元组,则称这个属性或属性组做候选码。


7.接6题,关系模式R的规范化程度最高达到( B )。
A. 1NF B. 2NF C. 3NF D. BCNF
【分析】:
在这里插入图片描述


8.下列说法正确的是 ( B )
A. 视图是观察数据的一种方法,只能基于基本表建立。
B. 视图是虚表,观察到的数据是实际基本表中的数据。
C. 索引查找法一定比表扫描法查询速度快。
D. 索引的创建只和数据的存储有关系
【分析】:虚表,是从一个或几个基本表(或视图)导出的表;
只存放视图的定义,不存放视图对应的数据;
基表中的数据发生变化,从视图中查询出的数据也随之改变。


9.若事务T对数据R已加排他锁(X锁),则其他事务对R( D )
A. 可以加共享锁(S锁),不能加X锁
B. 不能加S锁,可以加X锁
C. 可以加S锁,也可以加X锁
D. 不能加任何锁
【分析】:封锁就是事务T在对某个数据对象(例如表、记录等)操作之前,先向系统发出请求,对其加锁
加锁后事务T就对该数据对象有了一定的控制,在事务T释放它的锁之前,其它的事务不能更新此数据对象。
基本封锁类型

  • 排它锁(X锁)/写锁
    • 用于数据修改操作,例如 INSERT、UPDATE 或 DELETE。确保不会同时同一资源进行多重更新。**如果事务T对数据A加上排他锁后,则其他事务不能再对A加任任何类型的封锁。**获准排他锁的事务既能读数据,又能修改数据。
  • 共享锁(S锁)/读锁
    • 共享 (S) 用于不更改或不更新数据的操作(只读操作),如 SELECT 语句。如果事务T对数据A加上共享锁后,则其他事务只能对A再加共享锁,不能加排他锁。获准共享锁的事务只能读数据,不能修改数据。

10.设有T1和T2两个事务,其并发操作如下所示,下面评价中正确的是( C )

T1T2
(1) 读A=10,B=5
(2) 求和A+B=15
(3)读A=10,A=A*2写回
(4) 读A=20,B=5
(5) 求A+B=25,验证错

A. 该操作不存在问题 B. 该操作丢失修改
C. 该操作不能重复读 D. 该操作读“脏数据”
【分析】:

  • 丢失数据
    • 针对一个事务提交后会覆盖另一个事务提交的结果
  • 脏读
    • 针对未提交数据如果一个事务中对数据进行了更新,但事务还没有提交,另一个事务可以“看到”该事务没有提交的更新结果,这样造成的问题就是,如果第一个事务回滚,那么,第二个事务在此之前所“看到”的数据就是一笔脏数据。
  • 不可重复读
    • 针对其提交前后,读取数据本身的对比)不可重复读取是指同一个事务在整个事务过程中对同一笔数据进行读取,每次读取结果都不同。如果事务1在事务2的更新操作之前读取一次数据,在事务2的更新操作之后再读取同一笔数据一次,两次结果是不同的。
  • 幻读
    • 针对其提交前后,读取数据条数的对比) 幻读是指同样一笔查询在整个事务过程中多次执行后,查询所得的结果集是不一样的。

区分不可重复读和幻读:
不可重复读:某人读自己的工资1000,(操作还没有完成)后来管理员将其工资改为2000,他再读工资的时候就变成2000了。
幻读:读取发现工资1000的有2个人,此时管理员又插入一个工资为1000的人,再次读取发现工资1000的人为3个。


11.在数据库系统中死锁属于( C )。
A. 系统故障 B. 程序故障 C. 事务故障 D. 介质故障
【分析】:事务故障分类

  • 事务故障:死锁
  • 系统故障:特定类型的硬件错误(如CPU故障)、操作系统故障、DBMS、代码错误、系统断电
  • 介质故障:系统在运行过程中,由于某种硬件故障,使存储在外存上的数据部分损失或全部损失。
  • 计算机病毒:一种可以繁殖和传播的人为的故障或破坏的计算机程序。

12.解决并发操作带来的数据不一致问题普遍采用( A )技术。
A. 封锁 B. 存取控制 C. 恢复 D. 协商


13.数据库系统中,单个用户使用的数据视图用______描述,它是用户与数据库系统之间的接口。( A )
A.外模式 B.存储模式 C.内模式 D.概念模式


14.以下关系数据库的基本数据操作中,不能同时操作两个关系的是( B )
A.交 B.选择C.连接 D.并


15.数据库系统中产生数据不一致性的根本原因是( C )
A.没有严格保护数据 B.未对数据进行完整性控制C.数据冗余 D.数据存储量大
【分析】:由于数据冗余,有时修改数据时,一部分数据修改,而另一部分没有修改,造成同一种数据有多个值,产生数据不一致。


16.在数据库设计中,当合并局部E-R图时,学生在某一局部应用中被当作实体,而在另一局部应用中被当作属性,那么被称之为( D )
A.属性冲突 B.命名冲突C.联系冲突 D.结构冲突
【分析】:合并局部E—R图时,主要有三类冲突:属性冲突、命名冲突和结构冲突

  • 属性冲突:属性值的类型不同、属性的取值范围不同或属性取值单位不同。
  • 命名冲突:异名同义,如对于科研项目,财务科称为项目,科研处称为课题,生产管理处称为工程;同名异义,即不同意义的对象在不同的局部E-R图中具有相同的名字。
  • 结构冲突:同一对象在不同E-R图中具有不同的抽象意义,例如题中“职工”在某一局部应用中被当做实体,而在另一局部应用中被当做属性;同一实体在不同的局部E-R图中所包含的属性个数和属性排列次序不完全相同;实体间联系的类型在不同E-R图中不相同,例如,实体E1、E2在一个局部E-R图中是多对多联系,而在另一个局部E-R图中是一对多联系。

17.如果要求学生关系S(SNO,NAME,SEX,AGE)中存储的学生信息满足下列条件:男生(SEX=‘F’)的年龄在15-60岁之间,女生(SEX=‘M’)的年龄在15-55岁之间。那么在关系S的定义中加入的检查子句正确的是( B )
A.CHECK(AGE>=15 AND((SEX=‘M’ AND AGE<=60)AND(SEX=‘F’ AND AGE<=55)))
B.CHECK(AGE>=15 AND((SEX=‘M’AND AGE<=60)OR(SEX=‘F’AND AGE<=55)))
C.CHECK(AGE>=15 OR((SEX=‘M’AND AGE<=60)OR(SEX=‘F’AND AGE<=55)))
D.CHECK(AGE>=15 OR((SEX=‘M’AND AGE<=60)AND(SEX=‘F’AND AGE<=55)))


18.公司中有多个部门和多名职员,每个职员只能属于一个部门,一个部门可以有多名职员,从职员到部门的联系类型是( C )。
A.多对多 B.一对一
C.多对一 D.一对多


19.数据库系统中,使用宿主语言和DML编写应用程序的人员是( C )。
A.数据库管理员 B.专业用户C.应用程序员 D.最终用户
【分析】:宿主语言,是开发宿主环境的程序语言,也被称作系统开发语言。 DML:数据操纵语言。


20.关系代数表达式σ3<′4′(S)表示( C )。
A.表示从S关系中挑选3的值小于第4个分量的元组
B.表示从S关系中挑选第3个分量值小于4的元组
C.表示从S关系中挑选第3个分量值小于第4个分量的元组
D.表示从S关系中挑选第4个分量值大于3的元组


21.关系代数中的π运算符对应SELECT语句中的以下哪个子句?( A )
A.SELECT B.FROM C.WHERE D.GROUP BY


22.子模式DDL用来描述 (B)。
A.数据库的总体逻辑结构
B.数据库的局部逻辑结构
C.数据库的物理存储结构
D.数据库的概念结构
【分析】:数据库管理系统提供外模式数据描述语言描述外模式。外模式也称为子模式或用户模式,是对数据库用户看见和使用的局部数据逻辑结构及特征的描述。


23.在DBS中,DBMS和OS之间的关系是 ( )
A. 相互调用 B. DBMS调用OS C. OS调用DBMS D. 并发运行
【分析】:操作系统是计算机系统在软件上的第一层扩充,DBMS是构筑在操作系统的基础上来管理数据库的,DBMS的很多功能性实现都需要多操作系统的调用。


24.DBMS中实现事务持久性的子系统是 ( D )
A. 安全性管理子系统 B. 完整性管理子系统 C. 并发控制子系统 D. 恢复管理子系统


25.SQL的全局约束是指基于元组的检查子句和( C )。
A.非空值约束
B.域约束子句
C.断言
D.外键子句
【分析】:SQL的全局约束包括基于元组的检查子句(CHECK)和断言(CREATE ASSERTION断言名CHECK条件)。
SQL中,可以使用 CREATE ASSERTION语句,通过声明性断言来指定更具一般性的约束。
可以定义涉及多个表的或聚集操作的比较复杂的完整性约束。
断言创建以后,任何对断言中所涉及的关系的操作都会触发关系数据库管理系统对断言的检查,任何使断言不为真值的操作都会被拒绝执行。


26.下列SQL语言的定义语句中,哪一(些)组包含了不正确的定义语句?(C)
I.CREATETABLE…CREATEVIEW…CREATEINDEX…
II.DROPTABLE…DROPVIEW…DROPINDEX…
III.ALTERTABLE…ALTERVIEW…ALTERINDEX…
A只有I BI和II C只有III DII和III
【分析】:由于视图是基于基本表的虚表,索引是依附于基本表的,因此SQL通常不提供修改视图定义和修改索引定义的操作。
表 CREATE TABLE DROP TABLE ALTER TABLE
视图 CREATE VIEW DROP VIEW
索引 CREATE INDEX DROP INDEX


27、设有两个事务T1、T2,其并发调度如下图所示。下列说法正确的是(B)
A该调度不存在问题 B该调度丢失修改C该调度不能重复读 D该调度读“脏”数据
在这里插入图片描述

【分析】:很明显的,T1对于A的修改被T2对A的修改覆盖掉了。


28、下列哪一个不是日志文件中应该记录的内容?(D)
A事务开始 B事务交换 C事务对数据的修改 D事务对数据的查询
【分析】:日志是日志记录的序列,它记录了数据库中所有更新活动。数据查询并没有涉及到数据更新,所以事务对数据的查询并不是日志记录的内容。


29、下列哪个不属于数据库对象:(D)
A.存储过程 B.角色 C.视图 D.日志
【分析】:数据库的主要组成部分就是数据库对象。很明显的,日志并不是数据库的主要组成部分。


30、下列叙述不正确的是( D )
A. 创建索引是加快表的查询速度的有效手段
B. 可以根据需要在基本表上建立一个或多个索引
C. 用户可以在最频繁查询的列上建立索引以提高查询效率
D. 可以根据需要在基本表上建立一个或多个聚簇索引
【分析】:聚簇索引的顺序就是数据的物理存储顺序,而对非聚簇索引的解释是:索引顺序与数据物理排列顺序无关。正式因为如此,所以一个表最多只能有一个聚簇索引。


31、关系模式R中若没有非主属性,则( C )
A. R属于2NF,但R不一定属于3NF B. R属于BCNF,但R不一定属于4NF
C. R属于3NF,但R不一定属于BCNF D. R属于4NF


32、SQL语言是(B) 的语言,易学习。
A.过程化 B.非过程化 C.格式化 D.导航式


33、SQL语言具有(B) 的功能。
A.关系规范化、数据操纵、数据控制 B.数据定义、数据操纵、数据控制
C.数据定义、关系规范化、数据控制 D.数据定义、关系规范化、数据操纵
【分析】:分别是DDL,DML,DCL


34、SQL语言具有两种使用方式,分别称为交互式SQL和(C) 。
A.提示式SQL B.多用户SQL C.嵌入式SQL D.解释式SQL


35、下面哪个不是数据库系统必须提供的数据控制功能 (B) 。
A.安全性 B.可移植性 C.完整性 D.并发控制


36、数据库的(B) 是指数据的正确性和相容性。
A.安全性 B.完整性 C.并发控制 D.恢复


37、在数据系统中,对存取权限的定义称为(B)。
A.命令 B.授权 C.定义 D.审计


38、在SQL Server 中删除触发器用( B )。
A.ROLLBACK B. DROP C.DELALLOCATE D. DELETE


39、数据库恢复的基础是利用转储的冗余数据。这些转储的冗余数据包括 (C) 。
A.数据字典、应用程序、审计档案、数据库后备副本
B.数据字典、应用程序、日志文件、审计档案
C.日志文件、数据库后备副本
D.数据字典、应用程序、数据库后备副本


40、关于“死锁”,下列说法中正确的是(D)。
A.死锁是操作系统中的问题,数据库操作中不存在
B.在数据库操作中防止死锁的方法是禁止两个用户同时操作数据库
C.当两个用户竞争相同资源时不会发生死锁
D.只有出现并发操作时,才有可能出现死锁


41、对并发操作若不加以控制,可能会带来(D)问题。
A.不安全 B.死锁 C.死机 D.不一致


填空

1.数据库设计分为六个阶段分别是:需求分析、概念结构设计 、逻辑结构设计 、物理结构设计 、数据库实施、数据库运行和维护


2.事务具有四个特性,分别为:原子性、一致性 、隔离性 和持久性(ACID)


3.在关系数据库中,任何不含多值依赖的二元关系模式的最高范式必是 BC 范式。


4、在并发控制中,事务 是数据库的逻辑工作单位,是用户定义的一组操作序列,是并发控制的单位


5、一个SQL语句原则上可产生或处理一组记录,而主语言一次只能处理一个记录,为此必须协调两种处理方式,这是通过使用游标 机制来解决的


6、保护数据安全性的一般方法是 设置用户标识和存取权限控制


7、安全性控制的一般方法有①、②、③、④和视图的保护五级安全措施。【答案】:①用户标识鉴定 ②存取控制 ③审计 ④数据加密


8、存取权限包括两方面的内容,一个是 ① ,另一个是 ②。
【答案】:①要存取的数据对象 ②对此数据对象进行操作的类型


9、在数据库系统中对存取权限的定义称为授权


10、DBMS存取控制机制主要包括两部分:自主存取控制,强制存取控制


11、数据库恢复是将数据库从 ① 错误 状态恢复到 ② 某一已知的正确状态 的功能


12、数据库系统在运行过程中,可能会发生故障。故障主要有事务故障、 系统故障 、介质故障和计算机病毒四类。


13、DBMS的基本工作单位是事务,它是用户定义的一组逻辑一致的程序序列;并发控制的主要方法是封锁机制


判断

1、经常更新的属性列上不适合建立聚簇索引。(√)


2、若R.(B,C)→R.A,则R.B→R.A,R.C→R.A。(×)


3、可以先修改相应的数据库,然后把日志记录写到外存的日志文件中。(×)


4、若视图的字段来自聚集函数,则此视图不允许更新。(√)


5、模式也称为逻辑模式,一个数据库可以有多个模式。(×)
【分析】:模式也称为逻辑模式,一个数据库只能有一个模式


6、delete from mytable; 该语句可以删除mytable表中的所有元组,但是表的定义仍然存在。(√)


7、数据库不允许存在数据冗余。(×)


8、设置惟一约束的列可以为空。(√)


简答

1、简述视图的作用。所有的视图是否都可以更新?为什么?
答:( 1 )视图能够简化用户操作
( 2 )视图机制可以使用户以不同的方式看待同一数据
( 3 )视图为数据库重构提供一定的逻辑独立性
( 4 )视图可以对机密的数据提供安全保护
不是所有的视图都可以更新。若视图的更新不能唯一地、有意义地转换成对相应基本表的更新,则这些视图不允许更新。


2.今有3个事务的一个调度:r3 (B) r1 (A) w3 (B) r2 (B) r2 (A) w2 (B) r1 (B) w1 (A)该调度是冲突可串行化的调度吗?为什么?
答:该调度是冲突可串行化的调度。
Sc1= r3 (B) r1 (A) w3 (B) r2 (B) r2 (A) w2 (B) r1 (B) w1 (A)
交换r1 (A) 和w3 (B)得到:
r3 (B) w3 (B)r1 (A) r2 (B) r2 (A) w2 (B) r1 (B) w1 (A)
再交换r1 (A) 和r2 (B) r2 (A) w2 (B)得到:
Sc2= r3 (B) w3 (B) r2 (B) r2 (A) w2 (B) r1 (A) r1 (B) w1 (A)
由于Sc2是串行的,而且两次交换都是基于不冲突操作的
所以Sc1= r3 (B) r1 (A) w3 (B) r2 (B) r2 (A) w2 (B) r1 (B) w1 (A)是冲突可串行化的调度。
【分析】:
冲突可串行化:一个调度Sc在保证冲突操作的次序不变的情况下,通过交换两个事务的次序可以得到另一个调度Sc‘,如果Sc’是串行化的,称调度Sc是冲突可串行化调度。
一个调度是冲突可串行化的,一定是可串行化的调度。
可以交换的情况

  • 不同事务,同一数据,读读操作可以交换
  • 不同事务,不同数据,无论读写都可以交换

3.试述关系模型的完整性规则。在参照完整性中,为什么外部码属性的值也可以为空?什么情况下才可以为空?
答:关系模型的完整性规则是对关系的某种约束条件。关系模型中可以有3类完整性约束:实体完整性、参照完整性和用户定义的完整性。
实体完整性规则:主属性不能取空值。
参照完整性规则:外部码要么取空值,要么等于被参照关系中的某个主码值。
参照关系中外部码可以为空,表示该属性的值尚不确定。但前提条件是外部码本身不是所在关系的主属性。


4.设有两个关系R (A,B,C) 和S (C,D,E),试用SQL查询语句表达下列关系代数表达式πA,E (σB = D (R∞S))。
select A,E
from R,S
where R.B=S.D;


5.设有关系R和S,其中R为参照关系,S为信赖关系。为了实现完整性约束,SQL规定可以对R的删除操作采取哪三种措施?
【答】:三种措施:

  • Restrict(或约束删除)拒绝执行或拒绝操作
  • cascade(或级联删除)
  • set null(或外键值置空)

6.设有关系数据库:
职工关系EMPLOYEE (职工号,职工名,街道,城市)
工作关系WORKS (职工号,公司号,工资)
公司关系COMPANY (公司号,公司名,城市)
假设职工可在多个公司兼职,请用关系代数表达式写出至少在公司号为‘C2’和‘C5’公司兼职的职工的职工号。
【答】:
首先建立一个临时关系K:
在这里插入图片描述

π职工号,公司号(工作关系)÷K

依据上面的关系数据库,试用SQL语句写出下列操作:
将所有在“联华公司”工作的职工加薪5﹪。

update 工资
set 工资=工资*105%
where 公司号 in(
	select 公司号
	from 公司关系
	where 公司名='联华公司'
);

7、设有关系模式R (A,B,C,D),F是R上成立的FD集,F = {D→A,D→B},试写出关系模式R的候选键,并说明理由。
【答】:①R的候选键是CD
②理由:从已知的F,可导出D→ABD,再根据增广律,可得出CD→ABCD,即CD值可决定全部属性值。


8、SQL中表达完整性约束的规则主要有哪几种?
【答】:有主键约束、外键约束、属性值约束和全局约束等。


综合

1.已知职工数据库中有三个数据表,分别是职工基本信息表、工资表和部门信息表,表结构如下表所示。
“职工基本信息”表

字段名职工编号姓名性别出生日期部门编号
类型及说明char(5),主码char(10), 不允许为空char(2)datetimechar(3),引用部门表的部门编号

“工资”表

字段名职工编号基本工资奖金实发工资
类型及说明char(5),主码,引用职工基本信息表中的职工编号moneymoneymoney

“部门信息”表

字段名部门编号部门名称部门简介
类型及说明char(3),主码char(20), 不允许为空varchar(50)

1、 使用alter table语句向“职工基本信息”表中添加一列,列名称为“职称”,类型为char,长度为10。
答:alter table 职工信息表 add 职称 char(10);
2、现在需向数据库中添加数据,已知要添加的数据如下,请使用insert语句完成,注意添加的先后顺序。
在这里插入图片描述

【注意:要考虑到外码,注意需要先创建哪一个表】
insert into 部门信息(部门编号,部门名称) values(‘01’,‘计算机’);
insert into 部门信息(部门编号,部门名称) values(‘02’,‘数学’);

insert into 职工基本信息(‘0101’,‘孙华’,‘女’,‘1970-10-3’,‘01’,‘副教授’);
insert into 职工基本信息 values(‘0201’,‘陈明’, ‘男’, ‘1965-8-5’,‘02’,‘教授’);

insert into 工资 values(‘0101’, 2000, 2500, 4500);

3、用update语句把“工资”表中所属部门编号为“01”的职工的奖金增加10%。
update 工资
set 奖金=奖金*1.1
where 职工编号 in
(select 职工编号
from 职工基本信息
where 部门编号=‘01’);

4、查询所属部门名称为“数学”的所有职工的工资信息。
select *from 工资
where 部门编号 in
(select 部门编号
from 部门信息,职工基本信息
where 部门名称=‘学习’ and 部门信息.部门编号=职工基本信息.部门编号);

5、查询部门编号和该部门的总人数。
select 部门编号,count(*)
from 职工基本信息
group by 部门编号;

6、查询所有姓“孙”的女职工的基本信息。
select *
from 职工基本信息表
where 姓名 like ‘孙%’ and 性别=‘女’;

7、在职工数据库中完成以下操作:
1)定义变量prof_quali,类型为char,长度为10
2)声明一个游标CS_cursor,该游标保存所有“职称”等于prof_quali变量值的职工基本信息和工资信息
3)打开CS_cursor游标,使用该游标逐行修改结果集中职工的基本工资和实发工资的值,使他们的值都在原来的基础上增加5004)关闭和释放CS_cursor游标
【答】DECLARE CS_cursor CURSOR FOR
SELECT 职工基本信息.职工编号, 职称, 基本工资 FROM 职工基本信息, 工资
WHERE 职工基本信息.职称=‘副教授’ and 职工基本信息.职工编号=工资.职工编号
OPEN CS_cursor
– Perform the first fetch.
FETCH NEXT FROM CS_cursor
– Check @@FETCH_STATUS to see if there are any more rows to fetch.
WHILE @@FETCH_STATUS = 0
BEGIN
– This is executed as long as the previous fetch succeeds.
UPDATE 工资
SET 基本工资=基本工资+500, 实发工资=实发工资+500
WHERE CURRENT OF CS_cursor
FETCH NEXT FROM CS_cursor
END
CLOSE CS_cursor
DEALLOCATE CS_cursor
GO


设计题

1、欲为某图书馆建立一个图书借阅管理系统,请仔细阅读以下需求描述,设计合理的数据库:
1) 图书信息的录入:要求能够将图书信息录入到数据库中,图书的基本信息包括书号、书名、作者、出版社、价格、类型、封面等。
2) 图书信息的修改:根据需要修改、删除图书信息。
3) 借阅证件信息录入:可以输入不同类型的借阅者信息,并根据需要修改、删除借阅证信息。不同类型的借阅证借书时,借书的数量时间以及续借的时间不同。
4) 借阅证管理:包括借阅证丢失、过期等管理。
5) 借阅管理:包括借书、还书、过期还书与书籍丢失处罚等管理。
6) 图书查询:包括按图书类别、书名、作者、出版社等的查询。
7) 借阅查询:可以查询当前所借图书和历史所借图书。
8) 用户登录:根据用户权限登录此系统。用户分为普通用户和超级用户,超级用户能实现上述1)~5)的管理功能,普通用户只能通过登录该系统进行图书查询和借阅。
9) 系统用户管理:可以管理系统的用户,包括添加、修改和删除用户。
根据需求描述,完成以下3题:
依据以上需求描述,设计系统的E-R图;
在这里插入图片描述

2、将该E-R图转换为关系模型,并指出每个关系模式的主码、外码以及相互间的参照关系;
带黑体的属性或属性组为主码
图书类别(类别号,类别名)
图书(书号,书名,作者,出版社,价格,类别号,封面,简介)
类别号为外码,引用图书类别表的类别号

读者类型(类型号,类型名,借阅本数,借阅天数,续借天数)
读者(借阅证号,姓名,工作单位,身份证,类型号,办证日期,借阅证状态)
类型号为外码,引用读者类型表的类型号

借阅(借阅证号,书号,借书日期,续借日期,归还日期,罚金,借阅状态)
借阅证号,书号为外码,分别引用读者表的借阅证号和图书表的书号

用户(用户名,密码,用户类型,借阅证号)
借阅证号为外码,引用读者表的借阅证号

3、根据关系模型设计数据库,以表格的形式给出每个数据表的结构。
数据表结构示例:
表名:Order,描述:订单信息表,管理订单信息
在这里插入图片描述

我设计的数据表结构如下:
表名: BookType 描述: 图书分类信息表
在这里插入图片描述

表名: BookInfo 描述: 图书基本信息表
在这里插入图片描述

表名: CardType 描述: 借阅证件类型
在这里插入图片描述

表名: CardInfo 描述: 借阅证信息表
在这里插入图片描述

表名: UserInfo 描述: 用户信息表
在这里插入图片描述

表名: BorrowInfo 描述: 借阅信息表
在这里插入图片描述


2、设学生课程数据库中有三个关系:
学生关系S(S#,SNAME,AGE,SEX)
学习关系SC(S#,C#,GRADE)
课程关系C(C#,CNAME)
其中S#、C#、SNAME、AGE、SEX、GRADE、CNAME分别表示学号、课程号、姓名、年龄、性别、成绩和课程名。
用SQL语句表达下列操作:
(1)检索选修课程名称为“MATHS”的学生的学号与姓名

select S#,SNAME
from S,CNAME,C
where C.C#=SC.C#
AND S.S#=SC.S
AND CNAME='MATHS';

(2)检索至少学习了课程号为“C1”和“C2”的学生的学号

select S# 
from SC
WHERE SC.C#='C1'
AND S# IN(
	SELECT S# 
	FROM SC
	WHERE C#='C2'
);

(3)检索年龄在18到20之间(含18和20)的女生的学号、姓名和年龄

SELECT S#,SNAME,SAGE
FROM S
WHERE SAGE BETWEEN 18 AND 20;

(4)检索平均成绩超过80分的学生学号和平均成绩

SELECT S#,AVG(GRADE) '平均成绩'
FROM SC
GROUP BY S#
HAVING AVG(GRADE)>80

(5)检索选修了全部课程的学生姓名

/*
理解:
1.拿出Student表的第一行数据
2.拿出Course表的第一行数据
3.拿出SC表的第一行数据 (其实这个表就是用来与前两个表进行对比判断的)

for(循环从Student表拿一行学生数据){
  for(循环从Course表拿一行课程信息){
    for(循环在SC表拿一行进行比对){
      SC表中的这条数据判断:
        SC.Sno == Student.Sno , SC.Cno == Course.Cno;
      是否SC表中的学号 = Student表中的学号 且
       SC表中的Cno = Course表中的Cno
    }
  }
}
*/
select SNAME
FROM S
WHERE NOT EXISTS(
	SELECT * 
	FROM COURSE 
	WHERE NOT EXISTS(
		SELECT * 
		FROM SC
		WHERE SC.S#=S.S#
		AND SC.C#=C.C#
	)
);

#另外一种写法
select SNAME
from S
where S# in(
	select S# 
	from SC 
	Group by S#
	having count(*)=(  /*该学生的选修的课程门数 =  所有课程的门数*/
		select count(*)  /*所有课程的门数*/
		from C
	)
);

(6)检索选修了三门课以上的学生的姓名

select SNAME 
FROM FROM S
WHERE S# IN (
	SELECT S# 
	FROM SC
	GROUP BY S#
	HAVING COUNT(*)>3
);

3、设学生-课程数据库中包括三个表:
学生表:Student (Sno,Sname,Sex,Sage,Sdept)
课程表:Course(Cno,Cname,Ccredit)
学生选课表:SC(Sno,Cno,Grade)
其中Sno、Sname、Sex、Sage、Sdept、 Cno、Cname、Ccredit 、Grade分别表示学号、姓名、性别、年龄、所在系名、课程号、课程名、学分和成绩。
试用SQL语言完成下列项操作:
(1)查询选修课程包括“1042”号学生所学的课程的学生学号

(2)创建一个计科系学生信息视图S_CS_VIEW,包括Sno学号、Sname姓名、Sex性别;

create view S_CS_VIEW 
as 
select Sno 学号,Sname 姓名,Sex 性别
from Student 
where Sdept='计科';

(3)通过上面第2题创建的视图修改数据,把王平的名字改为王慧平

update S_CS_VIEW 
set Sname='王慧平'
where Sname='王平';

(4)创建一选修数据库课程信息的视图,视图名称为datascore_view,包含学号、姓名、成绩。

create view datascore_view 
as 
select Sno,Sname,Grade
from Student,SC,Course
where Student.Sno=SC.Sno
and Course.Cno=SC.Cno
and Cname='数据库';

3、设有如下实体:
学生:学号、单位、姓名、性别、年龄、选修课程名
课程:编号、课程名、开课单位、任课教师号
教师:教师号、姓名、性别、职称、讲授课程编号
单位:单位名称、电话、教师号、教师名
上述实体中存在如下联系:
(1)一个学生可选修多门课程,一门课程可为多个学生选修;
(2)一个教师可讲授多门课程,一门课程可为多个教师讲授;
(3)一个单位可有多个教师,一个教师只能属于一个单位。
试完成如下工作:
(1)分别设计学生选课和教师任课两个局部信息的结构E-R图。
在这里插入图片描述

在这里插入图片描述

(2)将上述设计完成的E-R图合并成一个全局E-R图。
在这里插入图片描述

为避免图形复杂,下面给出各实体属性:
单位:单位名、电话
学生:学号、姓名、性别、年龄
教师:教师号、姓名、性别、职称
课程:编号、课程号
(3)将该全局E-R图转换为等价的关系模型表示的数据库逻辑结构。
单位(单位名,电话)
教师(教师号,姓名,性别,职称,单位名)
课程(课程编号,课程名,单位名)
学生(学号,姓名,性别,年龄,单位名)
讲授(教师号,课程编号)
选修(学号,课程编号)


版权声明:本文为weixin_43978453原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。