鉴于以下陈述:
S1: A foreign key declaration can always
be replaced by an equivalent check
assertion in SQL.
S2: Given the table R(a,b,c) where a and
b together form the primary key, the
following is a valid table definition.
CREATE TABLE S (
a INTEGER,
d INTEGER,
e INTEGER,
PRIMARY KEY (d),
FOREIGN KEY (a) references R)
以下哪一项陈述是正确的?
(A) S1 为真,S2 为假。
(B) S1 和 S2 都为真。
(C) S1 为假,S2 为真。
(D) S1 和 S2 都是假的。答案: (D)
说明:检查断言不足以替换外键。外键声明可能具有级联删除,这仅通过检查插入是不可能的。
使用检查条件,我们可以在向子表添加元素时获得与外键相同的效果。但是当我们从父表中删除一个元素时,参照完整性约束不再有效。因此,检查约束不能代替外键。
所以,我们不能用一张支票来代替它。
S2: Given the table R(a,b,c) where a and
b together form the primary key, the
following is a valid table definition.
CREATE TABLE S (
a INTEGER,
d INTEGER,
e INTEGER,
PRIMARY KEY (d),
FOREIGN KEY (a) references R)
错误的:
一个表中的外键应该唯一标识其他表的一行。在上面的表定义中,表 S 有一个外键引用 R 的字段 ‘a’。表 S 中的字段 ‘a’ 不唯一标识表 R 中的一行。
这个问题的测验