1 举例说明数据库的参照完整性规则。P53和P308
若属性(或属性集)F是关系r的外码,它与关系s的主码Ks相对应,则对于关系r中的每一个元组在属性F上的取值要么为空值null,要么等于关系s中某个元组的主码值。
例如,对于课程关系Course的外码priorCourse,如果它取空值表示该课程没有先修课程或不知道其先修课程;如果它不为空值,则它的先修课程必须是该校已经存在的某门课程,即它的取值必须是课程关系Course中某元组的主码“课程编号”courseNo的值。
违约处理的策略如下: 拒绝(NO ACTION)执行,是系统的默认策略:
当在被参照关系中删除元组时,仅当参照关系中没有任何元组的外码值与被参照关系中要删除元组的主码值相同时,系统才执行删除操作,否则拒绝此操作。
如要删除学生表Student中学号为“0700001”的记录,系统不允许,因为学号为“0700001”的同学在成绩表Score中选修了课程。
参照关系中可以随意删除元组。
级联(CASCADE)操作。当删除或修改被参照关系的某些元组造成了与参照关系的不一致时,则删除或修改参照表中所有不一致的元组。
例如,删除学生表Student中学号为“0700001”的记录,则自动删除被参照关系成绩表Score中学号为“0700001”的所有选课记录。
修改学生表Student中的学号,由“0700001”改为“0700006”,则自动修改被参照关系成绩表Score中学号为“0700001”的所有选课记录,将“0700001”全部改为“0700006”。
级联(CASCADE)操作必须在定义外码时给出显示定义。 设置为空值(SET NULL):
对于参照完整性,除了定义外码,还应定义外码列是否允许空值。 如果外码是主码的一部分,则外码不允许为空值。 置空值删除(NULLIFIES):
删除被参照关系的元组,并将参照关系中相应元组的外码值置空值.
2 检查点10.12 P366
系统崩溃时日志文件记录内容如下:
试写出系统重启后恢复处理的步骤及恢复操作(指UNDO、REDO操作),并指明A, B, C, D恢复后的值分别是多少?
3、可串行调度10.9(P366)
假设3个事务T1,T2,T3的操作按调度S1执行。 S1:R2(A) R1(B) W2(A) R3(A) W1(B) W3(A) R2(B) W2(B) (1) 画出S1调度的优先图。
(2) S1冲突可串行化吗?若是,给出它的等价串行调度。 (3) 将R2(B)移到R3(A)之前可得到新的调度S2。
S2:R2(A) R1(B) W2(A) R2(B) R3(A) W1(B) W3(A) W2(B) S2冲突可串行化吗?若是,给出它的等价串行调度。
4 简述查询优化的一般步骤。(p280)
(1) 逻辑优化:产生逻辑上与给定关系代数表达式等价的表达式 (2) 代价估计:估计每个执行计划的代价
(3) 物理优化:对所产生的表达式以不同方式做注释,产生不同的查询执行计划
1. 将查询转换成某种内部表示,通常是语法树 2. 根据一定的等价变换规则把语法树转换成标准(优化)形式 3. 选择低层的操作算法 对于语法树中的每一个操作:计算各种执行算法的执行代价;选择代价小的执行算法 4. 生成查询计划(查询执行方案) 下面有一个销售管理数据库,它包含下面三张表:
商场表Market(商场号Mno,商场名Mname,所在城市City)
商品Item(商品号Ino,商品名Iname,商品类别Type,颜色 Color,)
销售表Sales(商场号Mno,商品号Ino,售价Price,数量Qty, 销售日期Date) 用关系代数表达式实现查询:
1.查询商场“物贸商场”2008年1月1日以后销售的商品名称、售价和销售数量。 2.查询没有销售过“家用电器”的商场名和所在城市。 用SQL语句实现下述功能
3.查询上海每个商场都销售的商品的商品号和商品名。
4.创建一个视图,包括每个商场中商场号,商品的最低售价和最高售价。 5.删除“物贸商场”的所有销售记录。
某企业集团的数据库中包含了三个基本表:
GOODS (Gno, Gname, Cost, Type, Fact, Wqty) 商品表 商品号,商品名, 成本价, 型号,制造商,库存数量 SHOPS(Sno, Sname, Addr, Manager) 商场表 商场号,商场名,地址, 经理 SALES(Sno, Gno, Qty,Sdate,Price) 销售表 商场号,商品号,数量,日期,售价
?创建一个带参(参数是商场名)存储过程SAL_Amount,统计某个商场的总销售额。 ?为表SHOPS创建一个删除触发器Tr_Del,当在表SHOPS中删除一个商场的信息时,把该商场的所有销售记录删除。
设有关系模式R(职工编号,日期,日营业额,部门名,部门经理),该模式统计商店里每个职工的日营业额,以及职工所在的部门和经理信息。如果规定:每个职工每天只有一个营业额;每个职工只在一个部门工作;每个部门只有一个经理。试回答下列问题:
根据上述规定,
(1)写出模式R的最小函数依赖集和候选码;
(2)说明R不是2NF的理由,并把R分解成2NF 模式集; (3)进而分解成3NF模式集。
解: ① R的最小函数依赖集F={职工编号,日期}→日营业额 ,职工编号→部门名,部门名→部门经理}
R的候选码为(职工编号,日期)。 ② R中有函数依赖:职工编号→部门名
可见存在非主属性“部门名”部分函数依赖于候选码,所以R不是2NF模式。 R应分解成R1(职工编号,部门名,部门经理)
F1={ 职工编号→部门名,部门名→部门经理}主码:职工编号,无外码。 R2(职工编号,日期,日营业额)F2= ={职工编号, 日期}→日营业额}, 主码:(职工编号,日期), 外码 :职工编号此处,R1和R2都是2NF模式。 ③ R2已是3NF模式。
在R1中,存在两个函数依赖:职工编号→ 部门名,部门名→部门经理。其候选码为:职工编号
这样“部门经理”对“职工编号”是一个传递依赖,R1 不是3NF模式。 R1应分解成R11(职工编号,部门名)
F11={职工编号→部门名}主码:职工编号,外码:部门名
R12(部门名,部门经理)F12={部门名→部门经理} 主码:部门名,无外码 这样,ρ= { R11,R12,R2 }是一个3NF模式集。