定义组合的主键和外键

当您使用多列约束格式时,可以创建一个组合关键字。组合关键字指定多列的主键或外键约束。
以下示例创建两个表。第一个表的组合关键字表现为主键。第二表的组合关键字表现为外键。
CREATE TABLE accounts (
          acc_num INTEGER,
          acc_type INTEGER,
          acc_descr CHAR(20),
          PRIMARY KEY (acc_num, acc_type));
          
          CREATE TABLE sub_accounts (
          sub_acc INTEGER PRIMARY KEY,
          ref_num INTEGER NOT NULL,
          ref_type INTEGER NOT NULL,
          sub_descr CHAR(20),
          FOREIGN KEY (ref_num, ref_type) REFERENCES accounts
          (acc_num, acc_type));

在此示例中,sub_accounts 表的外键 ref_num ref_type,引用 accounts 表中的组合关键字 acc_numacc_type。如果在插入和更新期间,当您试图向 sub_accounts 表中插入一行,而其中 ref_numref_type 的值没有精确地与 accounts 表中已有行的 acc_num acc_type 的值对应,则数据库服务器将返回一个错误。

在引用和被引用的列之间,引用约束必须具有一对一的关系。换句话说,如果组合关键字是一组列的结合(组合关键字),则外键也必须是与组合关键字对应的一组列的集合。

由于数据库服务器的缺省行为。因此当您创建外键引用时,并不需要显式地引用组合关键字(acc_num acc_type)。可以如下重写前面示例的引用部分:
FOREIGN KEY (ref_num, ref_type) REFERENCES accounts