ON UPDATE CASCADE布尔字段可“停用”子记录

问题描述

我正在为Postgresql中的帖子存储评论表,并且试图在表约束内强制执行更新和结构层次结构。

我要对主键实施更改,但是我不确定如何将更改级联到另一个唯一的字段。

请注意,我希望能够在约束中使用表本身。它既是引用者又是引用者。对于ON CASCADE DELETE,这非常方便。

我有下表:

create table test_boolean_cascade (
  id serial primary key,parent_id integer,is_active boolean not null default true,is_parent_active boolean,unique (id,is_active),foreign key (parent_id) references test_boolean_cascade(id) on delete cascade,foreign key (id,is_active) references test_boolean_cascade (id,is_active) on update cascade
)
;

我用以下示例数据填充了它:

insert into test_boolean_cascade (parent_id,is_active,is_parent_active)
values
(null,true,null),(null,(1,(2,(3,(4,null)
;

不幸的是,以下sql语句仅更新is_active列。它还不会触发对子is_parent_active列的更新:

update test_boolean_cascade
set is_active = false
where id = 1
;

以下是所需结构的示例,它是由https://ozh.github.io/ascii-tables/

生成
+----+-----------+-----------+------------------+
| id | parent_id | is_active | is_parent_active |
+----+-----------+-----------+------------------+
|  1 | NULL      | true      | NULL             |
|  2 | 1         | false     | true             |
|  3 | 2         | false     | false            |
+----+-----------+-----------+------------------+

在上面的示例中,最好具有以下内容

  • 根据id级联删除记录
  • 根据根父级对is_parent_active的更新,在is_active上级联值更新

如果删除了父记录(由id表示),我可以删除从属记录。
我看不到如何强制所有子记录进行更新。如果父母的is_active字段更改为false,我希望将false字段强制设置为is_active

也可以,这种级联只能以一种方式工作吗?我的意思是,是否有可能强制所有子记录(如果仅在新值为false时进行更新)?这样做的原因是一次操作将禁用所有子级注释,但是如果重新启用注释只会影响1条记录,那就太好了。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)