PostgreSQL-NULL引用

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

我有一个任务和设备的数据模型。

有时Task需要完成一些Equipment,有时则不需要。

任务表

create table task (
    id serial primary key
,   task_name varchar(80)
)

设备表

 create table equipment (
        id serial primary key
    ,   equipment_name varchar(80)
    )

我想做的是向Task table添加一个空引用。

create table task (
    id serial primary key
,   task_name varchar(80)
,   equipment_id serial references equipment(id) 
)

我收到错误

ERROR:  conflicting NULL/NOT NULL declarations for column "equipment_id" of table "task"
SQL state: 42601

我如何在向表中添加外键以使其按预期工作的同时保持数据完整性?我以为您可以使用空引用。

sql postgresql foreign-keys referential-integrity
1个回答
0
投票

serial是实际上是整数的数据类型。因此,您想要:

create table task (
    id serial primary key,
    task_name varchar(80),
    equipment_id int references equipment(id) 
);

就是说,Postgres现在建议使用int generated always as identity。这使它更清晰:

create table task (
    id int generated always as identity primary key,
    task_name varchar(80)
);

create table task (
    id int generated always as identity primary key,
    task_name varchar(80),
    equipment_id int references equipment(id) 
);
© www.soinside.com 2019 - 2024. All rights reserved.