2014-03-04 78 views
0

我想有一個鏈表類(實際上不是,它應該是一個樹形結構)在我的數據庫,並有PostgreSQL的檢查,以防止循環。檢測週期爲SQL約束

我的數據結構由(id, parent_id, other_things)格式的記錄組成。用CHECK可以做到這一點嗎?

編輯:澄清架構 我的架構如下:

CREATE TABLE static_pages (
    id SERIAL PRIMARY KEY, 
    parent_id INTEGER REFERENCES static_pages(id), 
    other_things 
); 

並含有像

(1, NULL), 
(2, NULL), 
(3, 1), 
(4, 3), 
(5, NULL) 

等等的元組。

回答

1

不,你不能用CHECK約束做到這一點,但一個觸發器可以用於這一目的。

使用遞歸CTE(WITH RECURSIVE)查詢來檢測觸發器中的遞歸,從觸發器中的NEW記錄開始,觸發BEFORE INSERT OR UPDATE ON thetable FOR EACH ROW EXECUTE PROCEDURE my_recursion_check()

如果您添加架構和示例數據到您的問題然後在這裏評論我可能有時間寫一個演示觸發器。

請參見:

+0

我說我的架構中的問題。 –