2012-04-24 65 views
0

我有兩個PostgreSQL的表 - 表A中包含個人客戶的信用變動記錄(增加/減少)和B表包含了表的彙總表A.簡化結構的數據(我刪除FK和規則):如何確保PostgreSQL表中彙總數據的準確性?

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」是FK到「credit_review.id」。

因爲聚合表中的數據非常重要,所以我正在尋找確保這種需求的方法。我突然想到:

  1. 禁用刪除和udpating記錄兩個表
  2. 在彙總表中創建觸發器來檢查,如果輸入的數據是正確的(如果沒有,不允許插入)。我不太喜歡它,因爲當記錄插入到聚合表中時,credit_amount值將被計數兩次(在觸發器中第二次應用一次)。

你有一些建議,我如何保證這種情況呢?

回答

2

我不是你想執行不變完全清楚,但是從問題的總綱,我會傾向於使用觸發器代碼來執行它,和UE SERIALIZABLE交易。否則,在多個表上執行不變量變得非常複雜。

http://wiki.postgresql.org/wiki/SSI

披露:由於我的僱主需要執行多個表的複雜的完整性規則,我的工作是將SSI到PostgreSQL,與丹R.K.沿麻省理工學院的港口。