数据库系统工程师下午的《应用技术》有5个大题,每题15分,总分75,一般45及格。
(我的成绩已经出来啦!上午题60,下午题69!)
近年题型:
题型 | 数据流图 | E-R图 | 关系规范化 | SQL | 两段锁协议 | 数据库恢复 |
---|---|---|---|---|---|---|
2017 | √ | √ | √ | √ | √ | |
2018 | √ | √ | √ | √ | √ | |
2019 | √ | √ | √ | √ | √ | |
2020 | √ | √ | √ | √ | √ | |
2021 | √ | √ | √ | √ | √ | |
2022 | √ | √ | √ | √ | √ |
从2020年开始将数据流图改成了数据库恢复题型,其实是更简单了一些,其他的题型不变,但整体上感觉比前些年简单。在2022备考过程中整理了一些答题技巧,但是前提是已经将全部的知识点都学习过了!!适合考前看看背背。
我全程看了紫依的课程,整本教材学完之后,大题也就不难了,刚考完感觉问题不大,笔记就分享给大家啦!
数据库系统工程师下午题笔记如果想要word版本可以下载
数据库系统工程师下午题答题技巧
- E-R图
- 关系规范化
- SQL
- 两段锁协议(2PL)
- 数据库恢复
- 数据流图
E-R图
考点:
1、两方联系:两个实体之间产生联系(1:1, 1:*, * : *)。(实体矩形、联系菱形)
例如:(2020年真题)一个快递公司可以有若干快递员,一个快递员只能属于一家快递公司。(1: *)
2、三方联系:当同一联系需要三方同时参与的时候就是三方联系。
例如:(2019年真题)投资方和创业公司之间依靠孵化公司牵线建立创业项目合作关系, 具体实施由孵化公司的一位员工负责协调投资方和创业公司的一个创业项目。 一个创业项目只属于一个创业公司, 但可以接受若干投资方的投资。 (1: * : *)
3、弱实体:一个实体的存在必须以另一个实体为前提。(弱实体双边矩形、联系是双边菱形)
例如:学生的家长、员工的家属
4、聚合:将联系作为实体,与其他的实体产生联系。即两个实体A和B先产生联系,联系本身再与C产生联系,需要用方框把A和B之间的联系框起来。
例如:(2017年真题)顾客登录系统之后,可以下订单购买商品。代购员根据顾客的订单在超市采购对应商品,一份订单所含的多个商品可能由多名代购员从不同超市采购。
5、子实体:一个实体集可以按照某些特征区分为几个子实体。(矩形左右多两竖)
例如:(2018年真题)员工分为代购员和配送员。
6、同一实体集内的联系:同一实体集内的两个实体之间互相存在着一定的关系。
例如:第四版教材P237最上面。
注意:
三方联系与聚合的区别:
三方联系必须三方实体同时参与,缺一不可。
聚合有先后顺序,两个实体先产生联系,再与第三个实体产生联系。
总结:
1、问题1补充E-R图:认真读题目,确认参与联系的实体和联系类型(1:1, 1:*, * : *等)。确认联系类型,一定要优先根据题目信息判断,如果题目信息较少,不足以判断,再根据题目【逻辑结构设计】中给出的关系模式判断。(不确定的时候一般根据关系模式判断比较快速准确,因为 * : * 或 * : * : *类型需要用另外一个关系模式记录,并且这些实体的主码都在联系的关系模式的属性中)
2、问题2补充关系模式中的属性:一般都可以从题目的说明中找到答案。如果没有找到,根据具体语义以及【概念模型设计】中的E-R图判断。(一般还是比较简单的)
3、问题3,一般是增加实体、联系,在E-R图中补充,并且给出新的关系模式。仔细阅读说明,根据实际判断。
关系规范化
考点:
1、找候选码
候选码可以决定关系模式中的所有属性,且候选码的任何一个真子集都不能单独决定全属性。
2、是否满足某一范式,最高可达到第几范式
(1)有非主属性对码的部分函数依赖,不满足2NF。
(2)有非主属性对码的传递函数依赖,不满足3NF。
(3)有主属性对码的部分和传递函数依赖,不满足BCNF。
(4)有多值依赖,X→→Y,X和Y在一个关系模式,且只有X和Y不能有其他属性。如果有则不满足4NF,可以回答原因:“X多值决定Y,由于存在嵌入式的多值依赖,所以不满足4NF”。
3、分解关系模式
(1)有部分函数依赖
R(A,B,C,D,E,F),F={A→(C,D,E),(A,B)→F}
分解为R1(A,C,D,E)和R2(A,B,F)
(2)有传递函数依赖
R(A,B,C,D,E,F),F={A→(B,C), B→(D,E,F)}
分解为R1(A,B,C)和R2(B,D,E,F)
(3)有多值依赖
R(A,B,C,D,E,F),F={A→→B, A→(C,D,E,F)}
分解为R1(A,B)和R2(A,C,D,E,F)
总结:
1、找函数依赖集
2、判断候选码(首选编码,没有选名称)
3、根据主属性和非主属性判断是否有部分、传递函数依赖
(任一候选码中的属性都属于主属性,其他为非主属性)
4、确定达到什么范式
5、分解关系模式(按函数依赖集分解)
SQL
创建表
CREATE TABLE S ( Sno CHAR(5),Pno CHAR(6),Statu CHAR(8),Qty NUMERIC(9),PRIMARY KEY (Sno, Pno),FOREIGN KEY REFERENCES S(Sno),FOREIGN KEY REFERENCES S(Pno));
NOT NULL UNIQUE = PRIMARY KEY
PRIMARY KEY 可在一行后面写PRIMARY KEY,也可在最后写,但有多个一定在最后写,写在一起。
FOREIGN KEY 可在一行后面写REFERENCES S(Sno),也可在最后写,但是有几个写几行,不能写在一起。后可加:
ON DELETE CASCADE 删除被参照关系元组时,同时删除参照关系中的元组;
ON DELETE SET NULL 删除被参照关系元组时,将参照关系的属性值置空。
NULL、NOT NULL、UNIQUE
CHECK (Sex=“男” or Sex=“女”)
default 默认 例:default GETDATE()
修改表
ALTER TABLE S ADD Zap char (6);//增加列ALTER TABLE S DROP 完整性约束名;//删除列ALTER TABLE S MODIFY Zap char (6);//修改列
删除表
DROP TABLE S;
创建视图
CREATE VIEW CS-STUDENT(所有属性) AS SELECT Sno, Sname, Sage, Sex FROM Student WHERE SD=’CS’ WITH CHECK OPTION;
子查询语句(select后)可以任意复杂,但不能有DISTINCT和ORDER BY
WITH CHECK OPTION 保证更新、插入、删除的行满足子查询中的条件表达式
属性列明或全部省略或全部指定(都写上比较保险)
删除视图
DROP VIEW CS-STUDENT;
视图更新
从多个基本表连结导出的视图不允许更新
对使用了分组、聚集函数的视图不允许更新
单个基本表的投影、选择的视图允许更新,同基本表
建立索引
CREATE [UNIQUE][CLUSTER] INDEX SPJ-no ON SPJ (Sno ASC, Pno DESC, Jno ASC);
UNIQUE 表明此索引的每一个索引值只对应唯一的数据记录
CLUSTER聚簇索引,索引项的顺序是与表中记录的物理顺序一致的索引组织
删除索引
DROP INDEX SPJ-no;
查询
SELECT[ALL|DISTINCT] 目标列表达式 ,目标列表达式//投影 FROM 表名或视图名, 表名或视图名//笛卡尔积 WHERE 条件表达式//选择 GROUP BY 列名1 HAVING 条件表达式 ORDER BY 列名2 ASC|DESC//ASE升序默认,可以省略
WHERE 可使用的运算符: IN、NOT IN、LIKE(_% 匹配)、IS NULL、IS NOT NULL、算术运算符、AND、OR、NOT
聚集函数:COUNT([ALL|DISTINCT] *) 统计元组个数,COUNT、SUM、AVG、MAX、MIN([ALL|DISTINCT] 列名) 计算一个的……
(>,=, <=, =, ) any、 (>,=, <=, =, ) all
更名:as (所有地方都要用改后的名,as也可省略)
字符串:_一个字符,%任意字符串
转义符:普通的_和%前加转义符
集合:UNION并(自动去除重复)、UNION ALL并(保留重复)、INTERSECT交、EXCEPT差
外连接
左外连接:(左表所有数据都在,右表中没有的属性写null)
SELECT S.Sno, Sname, SC.Cno, Grade
FROM S
LEFT JOIN SC
ON S.Sno=SC.Sno
右外连接:(右表所有数据都在,左表中没有的属性写null)
RIGHT JOIN SC
ON S.Sno=SC.Sno
全外连接:(左右表所有数据都在,没有的属性写null)
FULL JOIN SC
ON S.Sno=SC.Sno
增删改
插入行
INSERT INTO 表名 VALUES (值1, 值2)//所有值INSERT INTO 表名 (列名1, 列名2) VALUES (值1, 值2)//部分值
删除行
DELETE FROM 表名//删除所有行(表还在)DELETE FROM 表名 WHERE 条件表达式//删除指定行
修改行
UPDATE 表名 SET 列名=新值 WHERE 条件表达式
授权
GRANT 权限, 权限 ON TABLE/DATABASE 表名/数据库名 TO 用户, 用户 [WITH GRANT OPTION];
WITH GRANT OPTION 获得权限的用户还可以将权限赋给其他用户
操作权限:
属性列(TABLE): SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES(4种)
视图(TABLE): SELECT、INSERT、UPDATE、DELETE、ALL PRIVILEGES(4种)
基本表(TABLE): SELECT、INSERT、UPDATE、DELETE、ALTER、INDEX、ALL PRIVILEGES(6种)
数据库(DATABASE): CREATETAB(可由DBA授予普通用户)
销权
REVOKE 权限, 权限 ON TABLE/DATABASE 表名/数据库名 FROM 用户 [RESTRICT|CASCADE];
RESTRICT 收回语句中指定用户的权限
CASCADE 除了收回语句中指定用户的权限,还收回该用户赋予其他用户的权限
创建触发器
CREATE TRIGGER 触发器名 [{BEFORE|AGTER}] [DELETE|INSERT|UPDATE of 列名]ON 表名[REFERENCING 临时视图名][FOR EACH ROW | FOR EACH STATEMENT]WHERE触发条件BEGIN触发动作END[触发器名]
REFERENCING 临时视图名:触发器运行过程中生成两个临时视图
(referencing old row as orow、referencing old-table as otab)
FOR EACH ROW 行触发器(该触发器由触发语句影响的每一行触发)
FOR EACH STATEMENT 语句触发器(默认,整个语句只触发一次触发器)
更改触发器
ALTRE TRIGER 触发器名 [BEFORE|AGTER] [DELETE|INSERT|UPDATE of 列名]ON 表名/视图名 ASBEGIN触发动作END
删除触发器
DROP TRIGGER 触发器名
两段锁协议(2PL)
背!!!
1、两段锁协议:同一事务对任何数据进行读写之前必须对数据加锁;在释放一个封锁之后,该事务不再申请和获得任何其他封锁。“两段”的含义:事务分为两个阶段。第一阶段是获得封锁(扩展阶段);第二阶段是释放封锁(收缩阶段)。
2、可串行化的并行调度:多个事务的并发执行时正确的,当且仅当其结果与某一次序串行地执行它们时的结果相同,称这种调度策略是可串行化的调度。可串行化是并发事务正确性的准则,按这个准则规定,一个给定的并发调度,当且仅当它是可串行化的才认为是正确调度。
(遵循两段锁协议,一定可串行化;不能遵循两段锁协议,不一定不是可串行化)
3、两段锁协议也可能产生死锁。
4、死锁的处理:(1)死锁预防(2)死锁避免(3)死锁检测(4)死锁解除
考点:
1、嵌入式SQL(游标CURSOR)
EXEC SQL
END_EXEC
(1)定义游标 DECLEARE 游标名 CURSOR FOR
(2)打开游标 OPEN 游标名
(3)推进游标 FETCH FROM 游标名 INTO 变量表
(4)关闭游标 CLOSE 游标名
2、事务
BEGIN TRANSACTION
END TRANSACTION
ROLLBACK 撤销
COMMIT 提交
3、并发操作导致数据不一致(都是因为破坏了事物的隔离性)
(1)丢失修改(2)不可重复读(3)读脏数据
4、事务隔离级别
READ UNCOMMITED 读未提交:任何情况无法保证
READ COMMITED 读已提交:可避免读脏数据
REPEATABLE READ 可重复读:可避免读脏数据、不可重复读
SERIALIZABLE 可串行化(最高级别)可避免读脏数据、不可重复读、幻读
(考虑/不考虑并发性能,不考虑可以用最高级别)
5、事务的特性(应该在上午题了解)
(1)原子性(2)一致性(3)隔离性(4)持久性
数据库恢复
1、故障后恢复的值
(1)已COMMIT的事务,填变量改后的值(不管在CHECKPOINT的前后)。
(2)未COMMIT的事务都填原来的值。
2、Redo和Undo的事务列表
(1)CHECKPOINT前COMMIT的事务不用管。
(2)CHECKPOINT和CRASH之间COMMIT的事务重做redo。
(3)未COMMIT的事务撤销undo。
3、损坏的回复过程
(1)事务故障(只需要日志文件)
step1:反向扫描日志文件,查找该事务的更新操作。
step2:对事务的更新操作执行你操作。
step3:继续反向扫描日志文件,查找该事务的其他更新操作,并做同样的处理,直到事务的开始标志。(2)系统故障(只需要日志文件)
step1:扫描日志文件,确定分别需要redo和undo的事务。
step2:对未完成的事务,需要执行撤销undo操作,讲已执行的操作撤销。
step3:对已提交的事务,需要执行重做redo操作,重新执行已执行的操作。
(3)介质故障(需要日志文件和数据备份)
step1:装载故障前最近一次的备份和故障前的日志文件副本。
step2:按照系统的恢复过程执行撤销undo和重做redo来恢复数据库。
数据流图
(修改题型后没有再考)
1、每一个小标题对应一个加工,仔细阅读题干中的说明,将每句话与图中的数据流对应,如果有一句话没找到对应的数据流,可能为缺失的数据流(有个题找缺失数据流)。
2、阅读题干说明的过程中可以对应地找到实体E和数据存储D,命名的时候一定要按照题干说明中的词语并结合实际语义来命名,不要随意编造。
3、如果某句话暂时存疑,可以先做标记,等后面的读完了再做判断。
4、根据找缺失数据流的分值来估算可能需要找几条缺失的数据流。(写答案没有顺序之分,写对即可)
5、保持父图与子图平衡的话背下来!!!!
父图中某加工的输入输出数据流必须与它的子图的输入输出数据流在数量和名字上相同。如果父图中的一个输入(输出)数据流对应于子图中几个输入(或输出)数据流,而子图中组成这些数据流的数据项全体正好是父图中的这一个数据流,那么它们仍然算是平衡的。