数据库主观题题库及答案
一、简答题
1. 简述数据库系统的三级模式结构以及两级映像的功能
题目:
简述数据库系统的三级模式结构以及两级映像的功能。
答案:
数据库系统的三级模式结构包括:
- 外部模式(视图):用户视角的数据库模式,每个用户可以有一个或多个视图。
- 概念模式(逻辑模式):整个数据库的逻辑结构和特征的描述,是所有用户的公共视图。
- 内部模式(存储模式):数据库在物理存储上的表示方式,包括存储结构、存取路径等。
两级映像的功能:
- 外部模式/概念模式映像:确保数据的独立性,即当概念模式改变时,不影响外部模式。
- 概念模式/内部模式映像:确保物理独立性,即当内部模式改变时,不影响概念模式。
解析:
三级模式结构和两级映像的设计是为了实现数据的独立性。外部模式/概念模式映像允许用户视图的变化不影响数据库的整体逻辑结构,而概念模式/内部模式映像则允许数据库的物理存储结构变化不影响逻辑结构。这种设计使得数据库系统能够灵活应对需求变化和性能优化,而不影响用户的使用体验。
2. 是否所有的视图都是可以更新的,为什么?
题目:
是否所有的视图都是可以更新的,为什么?
答案:
不是所有的视图都是可以更新的。视图的可更新性取决于视图定义的复杂程度和基础表的结构。
解析:
视图的可更新性受到以下因素的影响:
- 简单视图:基于单个表的简单选择查询的视图通常是可更新的,因为可以直接映射到基础表的更新操作。
- 复杂视图:涉及多个表或包含聚合函数、分组、联接等操作的视图通常不可更新,因为无法确定如何将更新操作映射到基础表。例如,一个包含SUM或AVG函数的视图无法直接更新,因为这些函数的值是由多个记录计算得出的,无法通过单一记录的更新来改变。
- 视图定义的约束:如果视图定义中包含了WHERE子句或DISTINCT关键字,更新操作可能会导致视图中的数据不再满足这些条件,从而影响视图的完整性。
因此,视图的可更新性需要根据具体情况来判断。
3. 哪些情况会违反参照完整性规则?
题目:
哪些情况会违反参照完整性规则?
答案:
参照完整性规则可能会在以下情况被违反:
- 外码引用不存在的主码:当一个表中的外码引用另一个表中的主码,而该主码在被引用的表中不存在时。
- 级联操作导致违反:例如,在删除或更新主表记录时,如果没有适当的级联规则,可能导致子表中的外码引用无效。
- 更新外码值:如果试图将外码值更新为一个不存在于主表中的值。
解析:
参照完整性是关系数据库中维护数据一致性的重要机制。它确保关系之间的引用关系是有效的。违反参照完整性规则通常发生在数据操作过程中,例如插入、更新或删除操作。如果在这些操作中没有遵循参照完整性规则,可能会导致数据不一致性。例如,删除父表中的记录时,如果没有相应的级联删除操作,子表中引用该记录的外码将变为无效引用,违反了参照完整性。
4. 简述强制存取控制规则。
题目:
简述强制存取控制规则。
答案:
强制存取控制(MAC)是一种基于安全级别的访问控制机制,主要用于军事和政府系统。它的基本规则包括:
- 读下写上原则:用户只能读取安全级别低于或等于自己安全级别的数据,只能向安全级别高于或等于自己安全级别的数据写入。
- 安全级别和分类:每个数据对象和用户都有一个安全级别(如机密、绝密等)和分类(如项目A、项目B等)。
- 强制执行:系统自动执行这些规则,用户无法绕过。
解析:
强制存取控制的目的是确保敏感信息不会泄露给未经授权的用户。通过严格的读写规则,系统可以防止高安全级别的信息被低安全级别的用户访问,同时也防止低安全级别的信息被高安全级别的用户修改。这种控制机制特别适用于需要严格保密的数据环境,如军事和政府系统。
5. 什么是活锁?试述活锁产生的原因和解决方法。
题目:
什么是活锁?试述活锁产生的原因和解决方法。
答案:
活锁是一种并发控制问题,指多个事务或进程在等待对方释放资源而无法继续执行的状态,但与死锁不同的是,活锁中的事务或进程仍然在活动。
产生原因:
活锁通常由以下原因引起:
- 资源竞争:多个事务或进程竞争同一资源,但每次尝试获取资源时都因为其他事务或进程的干扰而失败。
- 算法设计:某些并发控制算法可能会导致活锁,例如在资源分配时,如果每个事务或进程都试图避免冲突而不断重试。
解决方法:
解决活锁的方法包括:
- 随机化重试:引入随机延迟,使事务或进程在重试时有不同的时间间隔,从而减少同时竞争资源的概率。
- 优先级机制:为事务或进程分配优先级,确保高优先级的任务能够先获取资源。
- 资源预分配:在事务或进程开始前预先分配资源,避免在执行过程中因资源竞争而导致活锁。
解析:
活锁与死锁的区别在于,活锁中的事务或进程仍在尝试获取资源,但由于某种原因(如算法设计不当或资源竞争激烈),这些尝试不断失败,导致事务或进程无法前进。通过引入随机性、优先级机制或预分配资源等方法,可以有效避免活锁的发生,确保系统的正常运行。
6. 当系统从崩溃中恢复时,将构造一个undo-list和redo-list。解释为什么undo-list中的事务日志记录必须有后至前处理,而redo-list中的事务的日志记录要由前往后进行处理。
题目:
当系统从崩溃中恢复时,将构造一个undo-list和redo-list。解释为什么undo-list中的事务日志记录必须有后至前处理,而redo-list中的事务的日志记录要由前往后进行处理。
答案:
在数据库系统从崩溃中恢复时,undo-list和redo-list用于确保数据的一致性和完整性。
-
undo-list中的事务日志记录必须有后至前处理:这是因为undo操作需要逆向执行事务,以确保事务的原子性和一致性。如果系统在事务执行过程中崩溃,undo-list中的记录需要从最后一条开始撤销,这样才能保证事务的中间状态不会影响数据库的一致性。
-
redo-list中的事务的日志记录要由前往后进行处理:这是因为redo操作需要重做事务,以确保事务的持久性。如果系统在事务提交后崩溃,redo-list中的记录需要从第一条开始重做,这样才能保证事务的最终结果被正确应用到数据库中。
解析:
数据库系统在崩溃恢复时,通过undo-list和redo-list来实现事务的原子性、一致性和持久性。undo-list的逆向处理确保了如果事务未完成,可以撤销所有已执行的操作,恢复到事务开始前的状态。redo-list的正向处理则确保已提交的事务能够被正确应用到数据库中,保证数据的持久性。这种处理顺序是基于事务的ACID属性设计的,确保在系统恢复后数据的一致性和完整性。
二、应用题
1. 三个关系如下:
学生表S(学号,姓名,专业,性别,出生日期,籍贯)
课程表C(课程号,课程名,课程性质,学分,先修课程号)
选课表SC(学号,课程号,成绩)
(1)定义SC基本表,同时给出主码和外码定义。
题目:
定义SC基本表,同时给出主码和外码定义。
答案:
CREATE TABLE SC (sno CHAR(9),cno CHAR(5),grade SMALLINT,PRIMARY KEY (sno, cno),FOREIGN KEY (sno) REFERENCES S(sno),FOREIGN KEY (cno) REFERENCES C(cno)
);
解析:
在定义SC表时,首先需要确定表的主码和外码。主码是唯一标识每条记录的关键字段,这里选择学号(sno)和课程号&#x