>>궁금한자 님께서 쓰시길<<
:: 질문1)
:: on cascade delete기능은 한테이블에서 delete될때, delete 되는 레코드를
:: 참조한는 다른 테이블의 모든 레코드를 알아서 지워주고나서, delete하는 것으로
:: 알고 있습니다...맞나요?
:: 그렇다면, on cascade delete기능을 테이블 정의할때, 만드는 방법이 있고,
:: 일반 쿼리를 날릴때, 명시해주는 방법도 있는 것 같은데...
:: 어디에 적어줘야 하는 건가요?
::
Postgres 매뉴얼을 보니까 테이블을 정의할 때 사용합니다. 또, 마스터 테이블이 아니라 레퍼런스 테이블 생성시 정의하는 겁니다.
예를 들어, 아래의 예라면
create table B (b integer references A on delete cascade);
와 같이요...
:: 질문2)
:: 테이블 A(master table) 와 테이블 B, 테이블 C가 있다고 가정할때,
:: 테이블 B에서 테이블 A(master)의 한 필드를 참조합니다...
:: 테이블 C에서 테이블 A(master)의 한 필드를 참조합니다..
:: 그리고 on cascade delete기능(위에서 질문드린 바와 같이
:: 언제 설정을 해야하는지는 모르고 있음)을 설정하였다고 합시다..
::
:: 테이블 B에는 delete 연산을 수행시, 한 레코드가 지워지고나서 테이블C로
:: 지워진 레코드가 삽입되는(after delete on table B...) 트리거를 갖고 있습니다..
::
:: 테이블 A의 한 레코드(B와 C에게 참조되는 레코드라 하면)에 대해
:: delete 연산을 수행하면, B와 C의 테이블에서는 어떤 순서로 작업이
:: 일어나나요?
::
순서는 저도 잘 모르겠습니다. 하지만 B, C 테이블 모두가 A 테이블을 foreign key로 참조하고 있다면 순서는 관계없지 않나요? 어차피 A 테이블의 로우가 삭제될때 참조하는 값을 가지는 B, C 테이블의 로우들은 삭제될테니까요. 만일 C 테이블에서 삭제되지 않기를 원한다면 C 테이블에서는 foreign key를 설정하지 않으면 됩니다.
|