我有两个 PostgreSQL 表 - 表 A 包含单个客户的信用变动记录(增加/减少),表 B 包含聚合表 A 的数据。表的简化结构(我删除了 FK 和规则):
CREATE TABLE "public"."credit_review" (
"id" SERIAL,
"client_id" INTEGER NOT NULL,
"credit_change" INTEGER DEFAULT 0 NOT NULL,
"itime" TIMESTAMP(0) WITH TIME ZONE DEFAULT now()
) WITHOUT OIDS;
CREATE TABLE "public"."credit_review_aggregated" (
"id" SERIAL,
"credit_amount" INT DEFAULT 0 NOT NULL,
"valid_to_review_id" INT NOT NULL,
"client_id" INTEGER NOT NULL,
"itime" TIMESTAMP(0) WITH TIME ZONE DEFAULT now()
) WITHOUT OIDS;
“credit_review_aggregated.valid_to_review_id”列是“credit_review.id”的FK。
因为聚合表中的数据正确非常重要,所以我正在寻找一种方法来确保这种需求。我突然想到:
- 禁用删除和更新两个表中的记录
- 在聚合表上创建触发器以检查输入的数据是否正确(如果不正确,则不允许插入)。我不太喜欢它,因为当将记录插入聚合表时,credit_amount 值将被计算两次(一次在应用程序中,第二次在触发器中)。
您对我如何确保这种情况有一些建议吗?