2012-11-29 45 views
2

這基本上是如何我的數據庫看起來像更改記錄使用觸發器

 
ID | descendant | father | mother 
--------------------------------- 
1  X   Y  Z 
2  Y   A  B 

字母X,Y,Z,A,B表示一些代碼或編號

例如,如果我改變代碼Y到R第1行(ID = 1)如果我在第2行中將Y更改爲R,我想將代碼爲Y的每個字段更改爲代碼R,反之亦然,因此會自動將Y更改爲第1行中的R

最重要的是,如果一些代碼更改爲另一個,就像我傷心y以R或至G什麼在數據庫中的每個記錄有碼Y應改爲R或G.

我能做到這一點與觸發器。或者可以使用其他方式。 (我的用戶已經通過我的C#應用​​程序更改記錄的能力)

+3

哪些DBMS您使用的? PostgreSQL的?甲骨文?火鳥? –

+0

我正在使用SQLite – FosAvance

回答

1

使用triggers這樣,每一個領域:

CREATE TRIGGER update_descendant 
AFTER UPDATE OF descendant ON MyTable 
BEGIN 
    UPDATE MyTable SET descendant = NEW.descendant WHERE descendant = OLD.descendant; 
    UPDATE MyTable SET father  = NEW.descendant WHERE father  = OLD.descendant; 
    UPDATE MyTable SET mother  = NEW.descendant WHERE mother  = OLD.descendant; 
END; 

(如果descendant列是獨一無二的,你不需要更新)

0

與在此基礎上表的觸發器,你可能會得到一個突變。這可能由另一個具有映射的表格控制。

與此類似:

map_table 
------------- 
original_val 
new_val 

,那麼你在X填寫的原件和R作爲新的,那就有可能使用該插入物解決您的原始表。