我有一个任务和设备的数据模型。
有时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
我如何在向表中添加外键以使其按预期工作的同时保持数据完整性?我以为您可以使用空引用。
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)
);