为什么在PostgreSQL中主键与其他(不是null)列的组合不是自动唯一的?

时间:2019-04-23 07:38:50

标签: database postgresql primary-key unique-constraint

在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不会在包括主键的组合引用上自动添加唯一约束?

1 个答案:

答案 0 :(得分:0)

主键的定义应唯一且不能同时为null。 NULL值始终类似于“ unknow”值,因此您不能在现场使用此PK。

https://www.w3schools.com/sql/sql_primarykey.asp