📜  门| GATE-CS-2014-(Set-1) |第 65 题

📅  最后修改于: 2021-09-24 05:33:21             🧑  作者: Mango

鉴于以下陈述:

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 中的一行。
这个问题的测验