postgreSQL如何同步聚合表



假设我有两个具有相同结构的表。A -来自法国的用户B -用户来自德国它们都有字段- id,姓名,薪水。C是一个名为WorldUsers的聚合表

当我改变A或B时,我希望C也改变。当我改变C时,我希望A和B也改变。

最好的方法是什么?

现在我的计划是:

  1. 创建表C,在字段id上为A和B设置2个外键(delete cascade, update cascade)
  2. 为A和B的id创建2个外键,链接到C
  3. 我想这应该可以工作?但我想知道这是否是最好的方法,希望听到反馈

我能想到的唯一方法就是使用视图。首先将WorldUsers创建为视图:

create view WorldUsers as
select id, name, salary
from france
union all
select id, name, salary
from germany;

然后您可以在视图上创建一个触发器。因此,如果其中一个值更改,则可以更改底层表。

也就是说,我会质疑你对这个数据模型的整个前提。为什么不将所有数据存储在一个带有国家列的表中呢?

create table WorldUsers (
id int generated always as identity,
name text,
salary numeric,
country text,
check (country in ('france', 'germany'))
);

所有的更新都在这张表上。如果希望查看特定表中的用户,请使用where子句。或者,如果您确实需要,可以为每个国家/地区创建单独的视图。

最新更新