为什么主键与其他(非空)列的复合在PostgreSQL中不是自动唯一的? [重复]

问题描述 投票:0回答:1

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

database postgresql primary-key unique-constraint
1个回答
0
投票

主键的定义应该是唯一的,而不是同时为空。 NULL值总是像“未知”值,所以你不能使用这个insite PK。

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

© www.soinside.com 2019 - 2024. All rights reserved.