我正在使用DB2来创建一些表。我有两个看起来像这样的表:
create table TEST_TABLE1
/* */
(
PRIMARY_COLUMN1 int not null,
PRIMARY_COLUMN2 varchar(50) not null,
primary key (PRIMARY_COLUMN1,PRIMARY_COLUMN2)
);
create table TEST_TABLE2
/* */
(
PRIMARY_COLUMN1 int references TEST_TABLE1(PRIMARY_COLUMN1) not null,
PRIMARY_COLUMN2 varchar(50) references TEST_TABLE1(PRIMARY_COLUMN2) not null,
primary key(PRIMARY_COLUMN1,PRIMARY_COLUMN2)
);
当我尝试添加表时,我收到此错误:
SQL0573N A column list specified in the references clause of constraint
"PRIMARY_COLUMN1..." does not identify a unique constraint of the parent table
or nickname "DB2INST1.TEST_TABLE1". SQLSTATE=42890
有人知道如何让TEST_TABLE2引用TEST_TABLE1吗?
我也试过像这样创建TEST_TABLE2并得到了同样的错误:
create table TEST_TABLE2
/* */
(
PRIMARY_COLUMN1 int references TEST_TABLE1(PRIMARY_COLUMN1) not null,
primary key(PRIMARY_COLUMN1)
);
谢谢, 贾斯汀
答案 0 :(得分:2)
作为拇指规则,外键只能引用一个唯一的密钥。
合乎逻辑的解释是......说你有名字
FIRST LAST
-----------
John Abraham
John Jones
当您创建外键refence以引用FIRST列时,父级中可能有两个值。这显然是模棱两可的!而当您创建包含这两列的引用(这是唯一的)时,歧义就不复存在了!
您收到的错误消息表明相同。
does not identify a unique constraint of the parent table
现在......分析你的DDL,
create table TEST_TABLE1
/* */
(
PRIMARY_COLUMN1 int not null,
PRIMARY_COLUMN2 varchar(50) not null,
primary key (PRIMARY_COLUMN1,PRIMARY_COLUMN2) <<----- Unique over 2 columns
);
您在Table1中定义PK,包括2列。
在第二个表中,您只需创建一个引用其中一列的外键!所以错误。
create table TEST_TABLE2
/* */
(
PRIMARY_COLUMN1 int
references TEST_TABLE1(PRIMARY_COLUMN1) not null, <<--------FK refers only one of them?
primary key(PRIMARY_COLUMN1)
);
解决方案可能是:
create table TEST_TABLE2
/* */
(
PRIMARY_COLUMN1 int not null,
PRIMARY_COLUMN2 varchar(50) not null,
primary key(PRIMARY_COLUMN1,PRIMARY_COLUMN2),
CONSTRAINT my_foreign FOREIGN KEY (PRIMARY_COLUMN1,PRIMARY_COLUMN2)
REFERENCES TEST_TABLE1(PRIMARY_COLUMN1,PRIMARY_COLUMN2)
<<---- Refer both columns..
);