考虑一个表示“大于或等于”的关系 geq,即 (x,y) ∈ geq 仅当 y >= x 时。
create table geq
(
ib integer not null
ub integer not null
primary key 1b
foreign key (ub) references geq on delete cascade
)
如果删除元组 (x,y),以下哪项是可能的?
(A)删除一个 z > y 的元组 (z,w)
(B)删除一个 z > x 的元组 (z,w)
(C)删除 w < x 的元组 (z,w)
(D)禁止删除(x,y)答案: (C)
解释:在上面的问题中,关系模式是 ( lb , ub ),其中 lb 是主键, ub 是引用其自身关系主键的外键。
因此,表 geq 既是主表(具有引用的键)又是子表(具有引用的键)。
该表有两个约束,一个是如果有一个元组(x,y),则y大于等于x,另一个是参照完整性约束,即对外键进行级联删除。
On-cascade-delete 说,“当引用的行从另一个表(主表)中删除时,也从子表中删除”。
Suppose the instance in the given relation is the following:
x y
-----
5 6
4 5
3 4
6 6
现在,如果我们删除元组 (5,6) 那么元组 (4,5) 也应该被删除(因为元组 (4, 5) 中的 5 引用了不再存在的元组 (5,6) 中的 5,因此引用元组也应该被删除),并且因为 (4,5) 被删除,因此元组 (3,4) 也应该出于同样的原因被删除。
因此,如果元组 ( 5,6 ) 被删除,总共必须删除 3 行。
现在从上面的例子我们可以说如果 (x,y), 即 ( 5,6 ) 被删除,那么元组 ( z, w) 即 ( 3, 4) 也被删除。我们可以在这里看到 w < x。因此选项C。
这个问题的测验