给出以下语句:
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均为TRUE。
(C) S1为FALSE,S2为TRUE。
(D) S1和S2均为FALSE。答案: (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中的行。
这个问题的测验