2012-12-02 51 views
1

我是一個新手,PHP和PostgreSQL表,,,,限制對插入或更新

我創建了一個表,下面的查詢,,,

CREATE TABLE public.affiliate (
    id INTEGER NOT NULL, 
    name VARCHAR(32), 
    parent INTEGER, 
    CONSTRAINT affiliate_pkey PRIMARY KEY(id) 
); 

在這裏,我已經填充表格中,id從1開始,其餘節點依次編號,最大深度數目設爲10.

現在,我需要限制表反對插入或更新,否則會創建循環層次結構。 我該怎麼做?

+1

1)我想你忘了將'FOREIGN KEY REFERENCES affiliate(id)'添加到父定義中? 2)可以施加部分順序:'檢查COALESCE(parent,id) wildplasser

+0

由於循環可能位於層次結構的任何級別,因此無法真正防止循環。 –

回答

1

我不會依賴自動生成的標識符出於商業目的,這往往會導致更多的問題,而不是解決問題。關於修改表的限制,您可以查看rule system

它可以讓你重寫移動查詢:

CREATE RULE prevent_insert AS 
    ON INSERT 
    TO public.affiliate 
    DO INSTEAD 
    NOTHING; 

這將防止在給定的表中插入。當然,這並不像一個約束,因爲它不會引發錯誤,因此不會使事務無效。