2014-03-04 2 views
0

데이터베이스에 연결된 목록 형식 (실제로는 트리 구조가 아님)이 있고 순환을 방지하는 PostgresSQL CHECK가 있습니다.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 제약 조건을 사용하여 수행 할 수는 없지만 이러한 목적으로 트리거를 사용할 수 있습니다.

BEFORE INSERT OR UPDATE ON thetable FOR EACH ROW EXECUTE PROCEDURE my_recursion_check() 트리거에서 NEW 레코드로 시작하는 트리거에서 재귀를 검색하려면 재귀 CTE (WITH RECURSIVE) 쿼리를 사용하십시오.

질문에 스키마 및 샘플 데이터를 추가 한 다음 여기에 의견을 말하면 데모 트리거를 쓸 수 있습니다.

은 참조 :

+0

나는 질문에 내 스키마를 추가했다. –