闭卷 -> 开卷,选填砍掉了,所以概念题都作雨课堂测试了。

一、关系数据理论题(共26分)

题目没变(相对于原来为闭卷出的卷子) 分值修改:10->26,6问 找几道题练练。

给出关系模式、属性全集、以及函数依赖关系。
image.png
题干很长,大半张纸。

  1. 确定候选键
    1. (什么是候选键)如何判断候选键?1个多个?
    2. 为什么是候选键,原因:因为它(属性或属性组)能(通过公式推导)能决定属性全集。
    3. 如何算:
      1. 函数依赖:只右(不是)、只左(必是)、既左又右(不确定);没有函数依赖的属性:必是!
      2. 先算一下只左的属性集闭包:如果只左的属性组合能决定全集,则这个组合是唯一候选码,停。
      3. 如果不能,就把既左又右的一个一个拿过来加到只左的属性集上,然后再求闭包,如果能决定全集,则是候选码。所有既左又右的都试一遍,可求出所有候选码。
      4. 求属性集闭包算法:_LF)6Y%AA3M6AOPE0AG2W0W.png
    4. 示例:
      1. image.png小心!F 没有函数依赖,算候选 码。
  2. 题目给的函数依赖满足第几范式?(只可能考第一、二范式,大概率是一)(5-20的复习课,第6章习题)
    1. 看看 F 中:是否满足各范式条件:
      1. 第一范式:每个分量是原子的 (一般题目必须满足的)
      2. 第二范式 :不存在部分依赖
      3. 第三范式:不存在传递依赖
      4. BC 范式:每一个决定因素都包含码,则满足Bcnf
    2. 示例:
      1. 给出的关系模式 R 达到了第几范式?image.png候选键是 AEF 但只有一个 A 就能确定 B。image.png 候选键是 A 但 C 和 D 并不是直接函数依赖于 A 的。
      2. 分解的模式R1R2各达到了第几范式?image.png注意示例中 BC 没有函数依赖也算满足!
  3. 给定某一种分解,判断其是否是无损的,是否保持函数依赖的。(只可能考一分为二的)
    1. 是否无损 -> 是否交集决定差集:
      1. ![@BIW)CIM9EQX7D~U~TGOCD.png
      2. 示例:image.png
    2. 是否保持函数依赖 -> 根据 U 写 F:
      1. image.png
      2. 经验:若 F 中有项的箭头两边元素在这种分解中被拆开了,肯定无法保持函数依赖了。
      3. 示例:image.png
  4. 对原来的F进行某种分解(6.3,6.4,6.5,三选一,肯定考6.4)
    1. 要求:转换成 3 NF,保持无损连接。
      1. 方法:合并:![AFTMFCMG7%}_$)3GTT`7V2.png
    2. 要求:转换成 3 NF,保持无损连接、保持函数依赖:
      1. 方法:在 6.3 基础上对分解并∪上候选键{(%1`$HPIB7VX09HI`DPAEO.png
      2. 示例:image.png

        二、SQL语句题(每小题5分,共35分)

        题目没变(相对于原来为闭卷出的卷子) 考察形式改变:填空 -> 全写,7问 3.51,3.55考,3.56不考, P110例3.62,考 3.72,3.74/5,3.78三选一 109页谓词不考、集合查询不考 题目的命令比较长。

image.png
image.png

  • 子查询

    1. -- 查询选修课程2且成绩在90分以上的所有学生的学号和姓名 | 3.51
    2. SELECT Student.Sno, Sname
    3. FROM Student, SC
    4. WHERE Student.Sno = SC.Sno -- 连接谓词
    5. AND SC.Sno ='2' -- 其它限定条件
    6. AND SC.Grade > 90
    7. ;
    -- 查询与“刘晨”在同一个系学习的学生 | 例 3.55
    SELECT Sno, Sname, Sdept
    FROM Student
    WHERE Sdept IN(                                                                        -- 这里也可以用`=`
      SELECT Sdept FROM Student WHERE Sname = '刘晨'
    )
    ;
    -- 查询与“刘晨”在同一个系学习的学生 | 另解 3.55
    SELECT Sname
    FROM Student AS s1
    WHERE EXISTS (
      SELECT * 
      FROM Student AS s2 
      WHERE s2.Sname = '刘晨'
                  AND s1.Sdept = s2.Sdept                            -- 理解每次取一个外层元组传递给内层查询
    )
    ;
    
  • 插入删除 ```plsql — 对每一个系,求学生的平均年龄,并把结果存入数据库 | 例3.72 CREATE TABLE Dept_age ( Sdept CHAR(15) Avg_age SMALLINT ); INSERT INTO Dept_age(Sdept, Avg_age) SELECT Sdept, AVG(Sage) FROM Student GROUP BY Sdept ;

— 删除计算机科学系所有选课记录 | 例 3.78 DELETE FROM SC WHERE Sno IN( SELECT Sno FROM Student WHERE Sdept=’CS’ ) ;


- 通配符`like`
- 排序 `DESC`
- 分组
   - P99:3.47、3.48。注意 `having` 的位置。(多题考到)
   - where 先于 having(group by)
   - P110:3.62(两种方法:第3章练习ppt最后两页,另一是这个例题的方法)
```plsql
-- 查询选修了全部课程的学生姓名。| 例 3.62
-- 没有一门课程是他不选修的
SELECT Sname
FROM Student
WHERE NOT EXISTS (
    SELECT *
    FROM Course
    WHERE NOT EXISTS (
        SELECT *
        FROM SC
        WHERE Sno = Course.Sno AND Sno = Student.Sno
    )
)
;
-- 用连接的方法另解
SELECT Sname
FROM Student
WHERE Sno IN (
    SELECT Sno
    FROM SC
    GROUP BY Sno
    HAVING COUNT(*) = (
        SELECT COUNT(*) FROM Course
    )
)
;
  • 聚集函数 ```plsql — 求各个课程号及相应选课人数 | 例 3.46 SELECT Cno,COUNT(Sno) — 分组后聚集函数将作用于每一组 FROM SC GROUP BY Cno ;

— 查询平均成绩大于等于90的学生学号和平均成绩 | 例 3.48 SELECT Sno,AVG(Grade) FROM SC GROUP BY Sno HAVING AVG(Grade) >= 90 — 只输出满足条件的组 ;


- 视图
- 授权 GRANT/REVOKE(4.2.4,P142示例) 
   - 注意创建视图再授权!
   - 书上例题照葫芦画瓢 / 实验二
```plsql
-- 建立计算机系学生的视图,王平老师拥有 SELECT 权限,张明主任拥有全部操作权限。
CREATE VIEW CS_Student AS 
    SELECT * 
    FROM Student
    WHERE Sdept = 'CS'
;
GRANT SELECT ON CS_Student TO 王平;
GRANT ALL PRIVILEGES ON CS_Student TO 张明;

三、数据库设计题(共24分)

题目小改(相对于原来为闭卷出的卷子) 增加了一点难度。比复习题作业题难一点。2问 找几道题练练。

题目很长!但每一句话都不是废话,翻译成实体的联系。

  • 画 E-R 图: 找到所有实体,及其相应的属性(仔细看每句话)
    • 主键下划线、外键波浪线
    • eg.多对多可能表述为双方一个对多再反过来一个对多。
  • 转化关系(7.4.1P232)
    • 主键下划线、外键波浪线
    • 一对一:额外属性随便作一个转化关系的外键。注意一方主键也要成为另一方的外键。image.png
    • 多对多:单独成为转换关系,双方的主键一起作为额外转换关系的主键!而额外属性作其外键!
    • 一对多:额外属性作多的一方外键。一方主键要作多方的外键。

P219图7.11和考试极其类似
image.png
注意职工之间的一对多关系!

四、日志记录分析题(共15分)

新增题型 知识看下面这些就够了;找几道题练练。 答题卡: image.png

参考题型:P305 T4T5
image.png

  • 理论依据,当系统故障时:P296 | P305 T4
    • 撤销未完成事务 UNDO :非正常结束:没有 commitrollback 的。
    • 重做已提交事务 REDO:(检查点之后的)事务可能还在缓冲区未写入就遇到系统故障了。
  • 系统恢复后,对于变量值的影响: P305 T5
    • 已提交的事务(检查点之前提交的事务 / 故障之后重做的事务)会影响变量的值,因为重做了。
    • 未提交的事务都被撤销了,因此对变量的修改没有生效。
  • 检查点 :P302底例子、P303图10.4、补充习题见下
    • 检查点之前提交的:不需要重做
    • 检查点之后、故障之前提交的:重做
    • 故障之前还未完成:撤销(回滚)

image.png
image.png
image.png
image.png
image.png