为引用来自 SQL Plus 中不同表的多个主键的外键添加约束?

0 sql oracle ddl foreign-keys

我是学习 SQL 的初学者,在实现这个概念时遇到了麻烦。

假设您创建了以下三个表:

CREATE TABLE dogOwner(
 ownerNo VARCHAR(8) CONSTRAINT ownerNo_pk1 PRIMARY KEY,
 ownerName VARCHAR(10)
);

CREATE TABLE catOwner(
 ownerNo VARCHAR(8) CONSTRAINT ownerNo_pk2 PRIMARY KEY,
 ownerName VARCHAR(10)
);

CREATE TABLE petsAdopted(
 petNo VARCHAR(8) CONSTRAINT petNo_pk PRIMARY KEY,
 ownerNo VARCHAR(8) CONSTRAINT ownerNo_fk1 REFERENCES dogOwner(ownerNo)
                    CONSTRAINT ownerNo_fk2 REFERENCES catOwner(ownerNo)
);
Run Code Online (Sandbox Code Playgroud)

你如何正确地为外键 ownerNo 创建约束,它从另外两个表中引用 ownerNo?

Ton*_*ews 5

你不能。您可以在 petsAdopted 中有 2 列:dogOwnerNo 和 catOwnerNo 以及 2 个外键。但是桌子设计似乎没有意义:宠物肯定是狗或猫(或其他东西),而不管谁拥有它?

这是一个替代设计:

CREATE TABLE owner(
 ownerNo VARCHAR(8) CONSTRAINT ownerNo_pk2 PRIMARY KEY,
 ownerName VARCHAR(10)
);

CREATE TABLE petsAdopted(
 petNo VARCHAR(8) CONSTRAINT petNo_pk PRIMARY KEY,
 petType VARCHAR2(10) NOT NULL CONSTRAINT petTypeChk (CHECK petType in ('CAT','DOG'))
 ownerNo VARCHAR(8) CONSTRAINT ownerNo_fk REFERENCES owner(ownerNo)
);
Run Code Online (Sandbox Code Playgroud)