[1] 1 5 6 9 14 17
	[2] 1 3 4 5
	[3] 1 6 7
	[4] 1 4 5 11
	[5] 1 2 3 4
	[6] -
	[7] 1 2 15
	[8] -
	[9] - (跳过)
	[10] 1 2 3 6 9
	[11] 1 2 3 5 6 7 8
	sql 语句 e-r 图

绪论

  1. 试述数据、数据库、数据库管理系统、数据库系统的概念。
  2. 试述数据库系统的特点。
  3. 数据库管理系统的主要功能有哪些?
  4. 试述数据模型的概念、数据模型的作用和数据模型的三个要素。
  5. 试述关系数据库的特点。
  6. 什么叫数据与程序的物理独立性?什么叫数据与程序的逻辑独立性?为什么数据库系统具有数据与程序的独立性?

关系数据库

  1. 试述关系模型的三个组成部分。

    关系模型由关系数据结构、关系操作集合和关系完整性约束三部分组成。

  2. 定义并理解下列术语,说明它们之间的联系与区别:
    1. 域,笛卡尔积,关系,元组,属性;
    2. 主码,候选码,外码;
    3. 关系模式,关系,关系数据库。
    1. 域是一组具有相同数据类型的值的集合。
    2. 笛卡尔积:给定一组域 `D_1, D_2, cdots, D_n`,这些域中可以有相同的。这组域的笛卡尔积为 `D_1 xx D_2 xx cdots xx D_n` `= {(d_1, d_2, cdots, d_n):` `d_i in D_i, i = 1, 2, cdots, n}` 其中每一个元素 `(d_1, d_2, cdots, d_n)` 叫作一个 `n` 元组 (`n`-tuple) 或简称元组 (tuple)。元组中的每个值 `d_i` 叫作一个分量 (component)。
    3. 关系:在域 `D_1, D_2, cdots, D_n` 上笛卡尔积 `D_1 xx D_2 xx cdots xx D_n` 的子集称为关系,表示为 `R(D_1, D_2, cdots, D_n)`。
    4. 元组:关系中的每个元素是关系中的元组。
    5. 属性:关系也是一个二维表,表的每行对应一个元组,表的每列对应一个域。由于域可以相同,为了加以区分,必须对每列起一个名字,称为属性 (attribute)。
    6. 候选码:若关系中的某一属性组的值能唯一地标识一个元组,则称该属性组为候选码 (candidate key)。
    7. 主码:若一个关系有多个候选码,则选定其中一个为主码 (primary key)。
    8. 外部码:设 `F` 是基本关系 `R` 的一个或一组属性,但不是关系 `R` 的码,如果 `F` 与基本关系 `S` 的主码 `K_S` 相对应,则称 `F` 是基本关系 `R` 的外部码 (foreign key),简称外码。
    9. 关系模式:关系的描述称为关系模式 (relation schema)。它可以形式化地表示为 `R(U, D, "dom", F)`,其中 `R` 为关系名,`U` 为组成该关系的属性名集合,`D` 为属性组 `U` 中属性所来自的域,`"dom"` 为属性向域的映像集合,`F` 为属性间数据的依赖关系集合。
    10. 关系:在域 `D_1, D_2, cdots, D_n` 上笛卡尔积 `D_1 xx D_2 xx cdots xx D_n` 的子集称为关系,表示为 `R(D_1, D_2, cdots, D_n)`。(题目要求我再解释一遍的...) 关系是关系模式在某一时刻的状态或内容。关系模式是静态的、 稳定的,而关系是动态的、随时间不断变化的, 因为关系操作在不断地更新着数据库中的数据。
    11. 关系数据库:关系数据库也有型和值之分。关系数据库的型也称为关系数据库模式,是对关系数据库的描述,它包括若干域的定义以及在这些域上定义的若干关系模式。关系数据库的值是这些关系模式在某一时刻对应的关系的集合,通常就称为关系数据库。
  3. 举例说明关系模式和关系的区别。

    关系是关系模式在某一时刻的状态或内容。关系模式是静态的、稳定的,而关系是动态的、随时间不断变化的,因为关系操作在不断地更新着数据库中的数据。例如,学生关系模式在不同的学年,学生关系是不同的。在实际工作中,人们常常把关系模式和关系都笼统地称为关系,这不难从上下文中加以区别,希望读者注意。

  4. 试述关系模型的完整性规则。在参照完整性中,什么情况下外码属性的值可以为空值?

关系数据库标准语言 SQL

  1. 试述 SQL 的特点。
  2. 什么是基本表?什么是视图?两者的区别和联系是什么?
  3. 试述视图的优点。

数据库安全性

  1. 什么是数据库的安全性?

    数据库的安全性是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。

  2. 试述实现数据库安全性控制的常用方法和技术。
  3. 什么是数据库中的自主存取控制方法和强制存取控制方法?
  4. 什么是数据库的审计功能,为什么要提供审计功能?

数据库完整性

  1. 什么是数据库的完整性?

    数据库的完整性是指数据的正确性和相容性。

  2. 数据库的完整性概念与数据库的安全性概念有什么区别和联系?

    数据的完整性和安全性是两个不同的概念,但是有一定的联系。 前者是为了防止数据库中存在不符合语义的数据,防止错误信息的输入和输出,即所谓垃圾进垃圾出 (Garbage In Garbage Out) 所造成的无效操作和错误结果。 后者是保护数据库防止恶意的破坏和非法的存取。 也就是说,安全性措施的防范对象是非法用户的非法操作,完整性措施的防范对象是不合语义的数据。

  3. 什么是数据库的完整性约束条件?

    完整性约束条件是指数据库中的数据应该满足的语义约束条件。

  4. 关系数据库管理系统的完整性控制机制应具有哪三方面的功能?

关系数据理论

数据库设计

  1. 试述数据库设计过程。
  2. 试述数据库设计过程中形成的数据库模式。
  3. 什么是数据库的再组织和重构造?为什么要进行数据库的再组织和重构造?

数据库编程

关系查询处理和查询优化

数据库恢复技术

  1. 试述事务的概念及事务的 4 个特性。恢复技术能保证事务的哪些特性?
  2. 为什么事务非常正常结束时会影响数据库数据的正确性?请举例说明之。

    事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。如果数据库系统运行中发生故障,有些事务尚未完成就被迫中断,这些未完成事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。例如某工厂的库存管理系统中,要把数量为 Q 的某种零件从仓库 1 移到仓库 2 存放,则可以定义一个事务 T,T 包括两个操作:Q1 = Q1 - Q,Q2 = Q2 + Q,如果 T 非正常终止时只做了第一个操作,则数据库就处于不一致性状态,库存量无缘无故少了 Q。

  3. 登记日志文件时为什么必须先写日志文件,后写数据库?

    把对数据的修改写到数据库中和把表示这个修改的日志记录到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。 如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次 UNDO 操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。

  4. 针对不同的故障,试给出恢复的策略和方法。(即如何进行事务故障的恢复,如何进行系统故障的恢复,以及如何进行介质故障的恢复。)
  5. 试述使用检查点方法进行恢复的步骤。

并发控制

  1. 在数据库中为什么要并发控制?并发控制技术能保证事务的哪些特性?

    数据库是共享资源,通常有许多个事务同时在运行。当多个事务并发地存取数据库时就会产生同时读取和/或修改同一数据的情况。若对并发操作不加控制就可能会存取和存储不正确的数据,破坏数据库的一致性。所以数据库管理系统必须提供并发控制机制。并发控制可以保证事务的一致性和隔离性。

  2. 并发操作可能会产生哪几类数据不一致?用什么方法能避免各种不一致的情况?
  3. 什么是封锁?基本的封锁类型有几种?试述它们的含义。
  4. 什么是活锁?试述活锁的产生原因和解决方法。
    如果事务 `T_1` 封锁了数据 R,事务 `T_2` 又请求封锁 R,于是 `T_2` 等待。`T_3` 也请求封锁 R,当 `T_1` 释放了 R 上的封锁之后系统首先批准了 `T_3` 的请求,`T_2` 仍然等待。然后 `T_4` 又请求封锁 R,当 `T_3` 释放了 R 上的封锁之后系统又批准了 `T_4` 的请求……`T_2` 有可能永远等待,如下表所示。这就是活锁的情形。活锁的含义是该事务等待时间太长,似乎被锁住了,实际上可能被激活。
    `T_1` `T_2` `T_3` `T_4`
    lock R - - -
    - lock R - -
    - 等待 lock R -
    unlock 等待 - lock R
    - 等待 lock R 等待
    - 等待 - 等待
    - 等待 unlock 等待
    - 等待 - lock R
    - 等待 - -
    活锁产生的原因:当一系列封锁不能按照其先后顺序执行时,就可能导致一些事务无限期等待某个封锁,从而导致活锁。 避免活锁的简单方法是采用先来先服务的策略。当多个事务请求封锁同一数据对象时,封锁子系统按请求的先后次序对事务排队,数据对象上的锁一旦释放就批准申请队列中第一个事务获得锁。
  5. 什么是死锁?请给出预防死锁的若干方法。
  6. 请给出检测死锁发生的一种方法,当发生死锁后如何解除死锁?
  7. 什么样的并发调度是正确的调度?

    可串行化 (Serializable) 的调度是正确的调度。 可串行化的调度的定义:多个事务的并发执行是正确的,当且仅当其结果与按某一次序串行地执行它们时的结果相同,我们称这种调度策略为可串行化的调度。