1、说明数据库中数据与程序逻辑独立性和物理独立性的含义。
答:
数据与程序的物理独立性:当数据库的存储结构改变了,由数据库管理员对模式/内模式映像作相应改变,可以使模式保持不变,从而应用程序也不必改变,这就是数据与程序的物理独立性,简称数据的物理独立性。
数据与程序的逻辑独立性:当数据的逻辑结构即模式改变时,由数据库管理员对各个外模式/模式的映像作相应改变,可以使外模式保持不变,从而应用程序不必修改,这就是数据与程序的逻辑独立性,简称数据的逻辑独立性。
2、所有视图是否都可以更新?为什么?
答:
基本表的行列子集视图一般是可更新的。若视图的属性来自聚集函数、表达式,则该视图肯定是不可以更新的。
因为视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。对视图的更新都要转换为对基本表的更新,而有些视图中的数据是统计的结果数据,无法对它的更新转换为对基本表的更新。
3、试述数据库设计的各个阶段。
答:
数据库设计过程的6个阶段:
①需求分析;
②概念结构设计;
③逻辑结构设计;
④数据库物理设计;
⑤数据库实施;
⑥数据库运行和维护。
这是一个完整的实际数据库及其应用系统的设计过程。不仅包括设计数据库本身,还包括数据库的实施、数据库的运行和维护。设计一个完善的数据库应用系统往往是上述6个阶段的不断反复。
4、参照完整性规则:若属性(或属性组)F是基本关系R的外码,它与基本关系S的主码K相对应(基本关系R和S不一定是不同的关系),则对于R中每个元组在F上的值必须为下面二者之一:
(1)或者取空值(F的每个属性值均为空值);
(2)或者等于S中某个元组的主码值。
说明参照完整性(1)可以为空的情况(2)不能为空的情况。各举一例说明。
答案:
在参照完整性中,如果外码属性不是其所在关系的主属性,外码属性的值可以取空值。例如,在下面的“学生”表中,“专业号”是一个外码,它不是学生表的主属性,可以为空。其语义是,该学生的专业尚未确定。
学生(学号,姓名,性别,专业号,年龄)专业(专业号,专业名)
而在下面的“选修”表中的“课程号”虽然也是一个外码属性,但它又是“选修”表的主属性,选修表必须满足实体完整性,所以其主属性“课程号”不能为空。
课程(课程号,课程名,学分)选修(学号,课程号,成绩)
5、什么是视图?说明视图的优点。
答案:
视图是从一个或几个基本表导出的表。视图本身不独立存储在数据库中,是一个虚表。即数据库中只存放视图的定义而不存放视图对应的数据,这些数据仍存放在导出视图的基本表中。视图在概念上与基本表等同,用户可以如同基本表那样使用视图,可以在视图上再定义视图。
视图的优点:
①视图能够简化用户的操作。
②视图使用户能以多种角度看待同一数据。
③视图对重构数据库提供了一定程度的逻辑独立性。
④视图能够对机密数据提供安全保护。
6、登记日志文件时为什么必须先写日志文件,后写数据库?
答案:
把对数据的修改写到数据库中和把表示这个修改的日志记录写到日志文件中是两个不同的操作。有可能在这两个操作之间发生故障,即这两个写操作只完成了一个。
如果先写了数据库修改,而在运行记录中没有登记这个修改,则以后就无法恢复这个修
改了。如果先写日志,但没有修改数据库,在恢复时只不过是多执行一次UNDO操作,并不会影响数据库的正确性。所以一定要先写日志文件,即首先把日志记录写到日志文件中,然后写数据库的修改。
7、试述事务的概念及事务的4个特性。恢复技术能保证事务的哪些特性?
答案:
事务是用户定义的一个数据库操作序列,这些操作要么全做、要么全不做,是一个不可分割的工作单位。
事务具有4个特性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持续性(Durability)。这4个特性也简称为ACID特性。
原子性:事务是数据库的逻辑工作单位,事务中包括的诸操作要么都做,要么都不做。一致性:事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。隔离性:一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能互相干扰。
持续性:持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其执行结果有任何影响。
故障恢复可以保证事务的原子性与持续性。
8、DBMS的主要功能有哪些?
答案:
①数据库定义功能;
②数据组织、存储和管理功能;
③数据操纵功能;
④数据库的事务管理和运行管理;
⑤数据库的建立和维护功能;
⑥其他功能,如不同数据库之间的互访和互操作功能等。
9、解释相关子查询和不相关子查询。
对于“学生-课程模式 S-T” ,包括如下3个模式:
学生表: Student(Sno,Sname,Ssex,Sage,Sdept)
课程表: Course(Cno,Cname,Cpno,Ccredit)
学生选课表:SC(Sno,Cno,Grade)
分别用不相关和相关子查询实现“查询学习了2号课的学生姓名”的SQL语句。
答案:
在嵌套查询中,如果子查询的查询条件不依赖于父查询,称为不相关子查询;如果子查询的查询条件依赖于父查询,称为相关子查询。
不相关子查询:
SELECT Sname /*父查询*/ FROM Student WHERE Sno IN ( SELECT Sno /*子查询*/ FROM SC WHERE Cno='2');
相关子查询:
SELECT Sname /*父查询*/ FROM Student WHERE EXISTS ( SELECT * /*子查询*/ FROM SC WHERE Student.Sno=SC.sno AND Cno='2');