2つの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値が2回カウントされるため(アプリケーションで1回、トリガーで2回目)、あまり好きではありません。
この状況を確実にする方法について、私にアドバイスはありますか?