在PostgreSQL中使用以下查询创建两个表时:
create table test_unique_pk (
id serial primary key,
value varchar not null
);
create table refer_unique_pk (
id integer,
value varchar,
foreign key (id, value) references test_unique_pk(id, value)
);
我知道了
there is no unique constraint matching given keys for referenced table "test_unique_pk".
如果我将第一个表修改为
create table test_unique_pk (
id serial primary key,
value varchar not null,
unique(id, value)
);
一切正常。
但是,由于主键已经是唯一的,所以在我看来,复合(id, value)
也应该是唯一的,因为我们不能用相同的id
构造两个元组,因此我们不能构造两个相等的元组(id, value)
的元组。
如果以上说法正确,为什么PostgreSQL不会在包括主键的组合引用上自动添加唯一约束?
答案 0 :(得分:0)
主键的定义应唯一且不能同时为null。 NULL值始终类似于“ unknow”值,因此您不能在现场使用此PK。