外键:在删除时设置为null但仅适用于一个关系字段

时间:2013-10-28 14:12:27

标签: postgresql foreign-keys relational-database

我有两个表,它们通过几列上的关系连接起来。我想创建外键来处理清理已连接的实体但不删除它们 - 我需要使用“SET NULL”选项。

我的桌子:

CREATE TABLE resource
(
  id integer NOT NULL,
  project_id integer NOT NULL,
  lang character(2) NOT NULL,
  recource_id integer,
  reserved_by integer NOT NULL,
  CONSTRAINT resource_v0_pkey PRIMARY KEY (id, project_id,  lang);

CREATE TABLE resource_list
(
  id integer NOT NULL
  project_id integer NOT NULL,
  lang character(2) NOT NULL,
  name character varying(128),
  CONSTRAINT resource_list_v0_pkey PRIMARY KEY (id, project_id,  lang);
  );

如何在删除资源时添加以下FK以将recource_id设置为BULL。看起来应该是这样的:

ALTER TABLE resource
ADD CONSTRAINT $2
  FOREIGN KEY (resource_id, project_id, lang)
  REFERENCES resource_list(id, project_id, lang)
  ON DELETE SET NULL;

重要的是,我希望仅对resource.recource_id设置NULL,而不是为所有连接的字段设置NULL。有可能吗?

1 个答案:

答案 0 :(得分:0)

resource.id是唯一的吗?如果是这样,那么在那里添加一个唯一约束,并设置第二个设置为null的外键。然后添加第二个外键并进行最初延期检查。