数据库第二套卷
一、选择题
1. 建立两个表的一对多联系,是通过什么索引实现的:“一方”表的主索引或候选索引;“多方”表的普通索引
一方的主键作为多方的外键
2. 设有关系R1和R2,经过关系运算得到结果S,则S是:一个关系
3. 使用CREATE SCHEMA语句建立的是:数据库模式
- 数据模型有“型”和“值”的概念。型是指对某一类数据的结构和属性的说明,值是型的一个具体赋值。
- schema只涉及型的描述,不涉及具体的值。
4. 能够消除冗余的键的范式是:4NF
5. 全局E-R模型的设计,需要消除属性冲突、命名冲突和:结构冲突
- 属性冲突:包括类型、取值范围、取值单位的冲突;
- 结构冲突:例如同一对象在一个局部E-R图中作为实体,而在另一个局部E-R图中作为属性,同一实体在不同的E-R图中的属性个数和类型不同等;
- 命名冲突:包括实体类型名、联系类型名之间异名同义,或同名异义等。
6. 数据库概念设计的E-R方法中,用属性描述实体的特征,属性在E-R图中,用什么表示:椭圆形
实体–矩形; 属性–椭圆形; 关系–菱形
7. 视图设计一般有 3 种设计次序,属于视图设计的有:自顶而下、自底而上、由里向外
通常有如下几种方法:
- 自顶向下。先全局框架,然后逐步细化
- 自底向上。先局部概念结构,再集成为全局结构
- 由里向外。先核心结构,再向外扩张
- 混合策略。1与2相结合,先自顶向下设计一个概念结构的框架,再自底向上为框架设计局部概念结构
8. 在下列的 SQL 语句中,属于数据控制的是:di
a、CREATE b、SELECT c、UPDATE d、GRANT e、DROP f、DELETE g、ALTER h、INSERT i、REVOKE
- 查询:SELECT
- 操纵:UPDATE,INSERT,DELETE
- 定义:CREATE,DROP
- 控制:COMMIT,ROLLBACK,GRANT等
9. 声明一个名为books_cursor的游标,和名为@book_name的游标变量,以下是正确语句:fetch next from books_cursor into @book_name
游标向下移动一行,获取的数据存入定义的游标变量里。可参考代码实例:SQL Cursor 基本用法
游标和主变量的存在是为了实现嵌入式SQL与主语言(比如JAVA、C++等)的通信。
主变量:SQL语句使用的主语言的程序变量简称为主变量。
SQL是面向集合的,主语言是面向记录的,所以引入游标来协调。应用程序可以根据需要滚动或浏览其中的数据。
游标是系统为用户开设的一个数据缓冲区,存放SQL的执行结果,每一个游标区都有一个名字。用户可以通过游标逐一获取记录,并赋值给主变量,交由主语言进一步处理。
使用游标的步骤:
- 使用游标前必须声明;没有检索,但要定义要使用的select语句;
- 一旦声明后,必须打开游标以供使用,用步骤1定义的select语句把数据实际检索出来;
- 对于填有数据的游标,根据需要取出各行;
- 结束游标的使用时,必须关闭游标。
游标变量是一个指针,在运行时刻与不同的SQL语句关联,在运行时取不同的SQL语句,可以引用不同的工作区
10. 以下属于RDBMS的是:postgresql、mysql、oracle
- RDBMS即关系数据库管理系统(Relational Database Management System) 。是SQL 的基础,同样也是所有现代数据库系统的基础,比如MS SQL Server, IBM DB2, Oracle, MySQL 以及Microsoft Access。
- Hadoop是分布式数据库。
11. 下列数据模型中,数据独立性最高的是:B
A. 网状数据模型
B. 关系数据模型
C. 层次数据模型
D. 非关系模型
关系数据库系统提供三级模式与二级映像,可以实现数据库的逻辑独立性与物理独立性,因而具有最高的数据独立性。
12. 下列关于数据库执行SQL语句的操作步骤描述正确的是:D
A. 解析并编译SQL语句
B. 确定并优化数据获取路径
C. 执行SQL,获取并返回数据
D. 以上都正确
sql语句本质上就好比一个java文件,都是要经历先解析编译后,处理优化,最后执行返回结果的过程
13. 用于连接两个字符串的运算符是: &
- 连接运算符主要用于连接字符串,其运算符有两个:+,&;
- &用来强调两个表达式作为字符串连接,如“hello”&23&”word”,结果为“hello23word”
- +连接两个字符串,要求+两端的类型必须一致,如“hello”+23+”word”,结果会报错“类型不匹配”
- 因此一般使用&连接两个字符串
14. 在SQL的授权语句中使用“ALL PRIVILEGES”,表示:所有的操作权限
15. R为4元关系R(A,B,C,D),S为3元关系S(B,C,D),则R×S构成的结果集为几元关系:七元。
RS(A,B,C,D,B,C,D)
16. 规范化过程主要是为解决数据库逻辑结构中的插入异常、删除异常和:冗余度大
17. 假设关系模式R属于3NF:仍存在一定的插入和删除异常
若关系模型R∈2NF,且每一个非主属性都不传递于码(任何非主属性不依赖于其他非主属性),则R∈ 3NF。3NF就是不允许关系模式的属性之间有这样的非平凡的函数依赖X→Y,其中X不包括码,Y是非主属性。X不包含有两种情况,一种情况X是码的真子集,这是2NF不允许,另一种情况X不是码的真子集,这是3NF不允许的。在3NF中,仍存在一定的插入和删除异常。
18. 设有关系:教师(教师号、姓名、职称、基本工资),已知不同职称的基本工资不同,将该关系规范到第三范式为:教师1(教师号、姓名、职称),教师2(职称、基本工资)
19. 能够实现实体完整性控制的关键字是:B
A. foreign key
B. primary key
C. references
D. A、C均可
关系模型的实体完整性在CREATE TABLE中用PRIMARY KEY定义。
《数据库系统概论(第4版)》王珊 萨师煊,P152原话
20. SQL Server提供的单行注释语句是:--
开头的或/**/
包围的
21. 当一条SELECT语句访问一张大表里的有限几行数据时,SQL Server2000通常会:为数据加上行级锁
对行的操作
22. 已经关系R=(A,B,C,D,E,F),F=(A->C,BC->DE,D->E,CF->B)。则(AB)F的闭包是:ABCDE
差不多就是封闭集合的意思。推荐阅读:【数据库】—闭包
二、判断题
1. 任何一个二目关系是属于2NF的。对
二目关系属于3NF
2. 数据库事务的原子性是指事务在执行过程中不能出现中断。错。
原子性是指,事务中的诸操作,要么都做,要么都不做。
3. 关系R2=(A,B,C,D,E),F=(AB,CE,E,AB,C,D)是3NF。
错的吧,函数依赖都没提,此题存疑。
4. 在确定关系的候选码时,如果属性X在函数依赖的左右都不出现,则候选码中必不包含X。错。
在确定关系的候选码时,如果属性X在函数依赖的左右都不出现,则候选码中必包含X,因为只有X能够函数决定X。
5. 字段或记录的有效性规则的设置是在数据库设计器中进行。错。
应该是表设计器。
6. 视图创建完毕后,数据字典中存放的是所引用的基本表的定义。错。
应该是视图的定义。
7. 关系运算中花费时间可能最长的运算是笛卡尔积。对。
三、问答题
1. 在供应商、零件数据库中有以下3个关系模式
供应商:S(Sno,Sname,City,Status)
零件:P(Pno,Pname,Weight,Color,City)
供应货:SP(Sno,Pno,Qty)
各属性的含义可由属性名体现,不再重复,供应货关系SP表示某供应商Sno,供应了Pno零件,数量为Qty。
用SQL语言完成以下操作:
求供应红色零件的供应商
1 | SELECT Sname |
求北京供应商的号码、名字和状况(Status)
1 | SELECT Sno,Sname,Status |
求零件P2的总供应量
1 | SELECT (Qty) |
把零件P2的重量增加5,颜色改为黄色
1 | UPDATE TABLE P |
2. 某学校有若干系,每个系有若干学生,若干课程,每个学生选修若干课程,每门课有若干学生选修,每一门课可以为不同的系开设,今要建立该校学生选修课程的数据库。请你设计ER图和关系模型。
- ER图略。
- 学生(学号,姓名,系号);选课(学号,课程号)
- 课程(课程号,课程名称) 开设(课程号,系号)
- 系(系号,系名)
3. 试论述关系数据库系统中视图(view)的定义,引进View的概念有什么优点
- 定义:从一个或几个基本表导出的虚表。
- 优点:
- 能够简化用户的操作;
- 使用户能以多种角度看待同一数据;
- 对重构数据库提供了一定程度的逻辑独立性;
- 对机密数据提供安全保护;
- 适当的利用视图可以更清晰的表达查询。
4. 假设存款余额x=1000元,甲事务取走存款300元,乙事务取走存款200元,如何实现这两个事务的并发控制,两个事务执行时间如下:
甲事务 | 时间 | 乙事务 |
---|---|---|
读x | t1 | |
t2 | 读x | |
更新x=x-300 | t3 | |
t4 | 更新x=x-200 |
- t1时刻,甲为数据x加上X锁;
- t2时刻,乙取数据x时遇上X锁,无法操作;
- t3时刻,甲对数据x完成更新,之后释放X锁,此时x=700;
- t4时刻,乙取数据x,此时x没有被其他事务上锁,乙为其加上X锁,之后乙完成读x,此时x=700,更新x的操作,x=500,操作结束后释放X锁。
- 一般有加锁、时间戳、乐观控制法(相对于悲观加锁或时间戳)
- 简单记忆:读取频繁乐观锁,写入频繁悲观锁;乐观锁取数据时认为别人不会修改,悲观锁取数据时认为别人会修改;
- 乐观控制:当悲观法对效率影响过大,或者在不会出现冲突的事务处理(如只读型事务)中,加锁就没有必要了,可以采用乐观并发控制。乐观控制分为三个阶段:读取阶段、校验阶段、写入阶段。
- 读取阶段。事务将数据写入本地缓存,此时不进行任何校验;
- 校验阶段。系统对所有事务进行同步校验;
- 写入阶段。数据将被最终提交。
- 乐观锁的两种方式:version和CAS操作方式
- CAS:compare and swap ,涉及3个操作数,数据所在的内存值,预期值,新值。当需要更新时,判断当前内存值与之前取到的值是否相等,相等则更新,不相等则重试。
- version:DB表中增加version字段,数据被修改时version++。当线程A要更新数据时,在读数据的同时也会读version;在提交更新时,若刚读到的version与当前DB中的version相等时才更新,否则retry更新操作,直到成功。
1 | //version法核心SQL代码: |
5. 试述数据模型中完整性约束条件的概念,并给出关系模型中的完整性约束。
- 数据的完整性约束条件是一组完整性规则。完整性规则是给定的数据模型中数据及其联系所具有的制约和依存规则,用以限定复合数据模型的数据库状态以及状态的变化,以保证数据的正确、有效、相容。
- 关系模型中有三类完整性约束:实体完整性、参照完整性、用户定义的完整性。
- 实体完整性:若属性A是基本关系R的主属性,则A不能取空值。
- 参照完整性:定义主码和外码之间的引用规则。
- 用户定义的完整性:针对某一具体关系数据库的约束条件,反映某一具体应用所涉及的数据必须满足的语义要求。
6. 活锁产生的原因是什么?解决办法是什么?
- 原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。
- 避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求封锁的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
7. 设有三个关系:S(S#,Sname,Age,Sex) C(C#,Cname,Teacher) SC(S#,C#,Grade) 试用关系代数表达式表示以下查询语句:
检索至少选修两门课程的学生学号(S#)
1~6是指笛卡尔后的列的编号
检索全部学生都选修的课程的课程号(C#)和课程名(Cname)
检索选修课程包含“陈军”老师所授课程之一的学生学号(S#)
检索选修课程号为k1和k5的学生学号(S#)
8. 大量包含用户账号、明文密码、身份证和邮箱在内的12306用户数据被泄露。请从技术上分析数据库系统可能发生了什么问题?要防止这类问题,有什么技术思路?
- 撞库攻击。撞库是黑客通过收集互联网已泄露的用户和密码信息,生成对应的字典表,尝试批量登陆其他网站后,得到一系列可以登录的用户。很多用户在不同网站使用的是相同的帐号密码,因此黑客可以通过获取用户在A网站的账户从而尝试登录B网址,这就可以理解为撞库攻击。
- 撞库可以通过数据库安全防护技术解决,数据库安全技术主要包括:数据库漏扫、数据库加密、数据库防火墙、数据脱敏、数据库安全审计系统。