2016-10-03 99 views

回答

1

如果您使用的是BEFORE INSERT觸發器,則可以在實際寫入之前修改插入的值。這應該不是很昂貴。如果需要尖端性能,請在C中編寫觸發器功能。

但我認爲視圖是最佳解決方案。您可以使用可更新的視圖,這樣您就不必更改應用程序代碼:

CREATE TABLE data(
    id integer PRIMARY KEY, 
    factor1 integer NOT NULL, 
    factor2 integer NOT NULL 
); 

CREATE VIEW interface AS 
    SELECT id, factor1, factor2, 
      factor1 * factor2 AS product 
    FROM data; 

test=> INSERT INTO interface VALUES (1, 6, 7), (2, 3, 14); 
INSERT 0 2 
test=> UPDATE interface SET factor1 = 7 WHERE id = 1; 
UPDATE 1 
test=> DELETE FROM interface WHERE id = 1; 
DELETE 1 
test=> SELECT * FROM interface; 
┌────┬─────────┬─────────┬─────────┐ 
│ id │ factor1 │ factor2 │ product │ 
├────┼─────────┼─────────┼─────────┤ 
│ 2 │  3 │  14 │  42 │ 
└────┴─────────┴─────────┴─────────┘ 
(1 row) 
+0

這就是我們提出的唯一策略。這個痛苦的部分是數據遷移,我們只是爲了獲得正確的表格和視圖而徘徊 – happybuddha