1

为什么不能将定义REFERENCES扩展为也支持表约束,然后FOREIGN KEY可以从 SQL 中消除?

REFERENCES很明显,和之间的区别在于FOREIGN KEYREFERENCES是列约束,而FOREIGN KEY是表约束。

例如,create table T (A int, B int, C int, primary key (A,B), (B,C) references T(A,B) on delete cascade)是不合法的,因为你需要有foreign keybefore (B, C),因为约束引用了多个列。

4

1 回答 1

1

SQL 是冗长且高度明确的。为什么?除了SQL-1992 标准已经以这种方式定义之外,不会有好的答案:

11.8 <referential constraint definition>

[...]

Format

     <referential constraint definition> ::=
          FOREIGN KEY <left paren> <referencing columns> <right paren>
            <references specification>

     <references specification> ::=
          REFERENCES <referenced table and columns>
            [ MATCH <match type> ]
            [ <referential triggered action> ]

FOREIGN KEY只是 DDL 语句中的强制关键字。就是这样。有人可能会争辩说,与or约束FOREIGN KEY相比,约束不应该是更高等级的公民,因此它们都需要适当的关键字UNIQUECHECK

11.6 <table constraint definition>

[...]

    <table constraint> ::=
            <unique constraint definition>
          | <referential constraint definition>
          | <check constraint definition>
于 2012-08-14T14:51:38.450 回答