개발 잘해지는 닉네임
290
2020-12-04 15:46:30
1
149

db에서 실제로 값을 지우진 않지만 cascade효과는 받고싶으면 어떻게 할까요?


삭제를 하면 안되는 테이블이 있습니다. 그래서 이 테이블에 deletedAt속성을 넣고 row삭제가 아닌 deletedAt=true를 하여 사용하고 있습니다. 당연이 검색을할 때도 where deletedAt = false으로 검색을 하여 사용하고 있습니다


그러한 테이블을 A테이블이라 할때 이 테이블과 외래키 제약조건으로 묶인 B, C테이블이 있다고 하면, A의 row를 지울때 B, C의 연관된 row를 함께 지워주고 싶어 cascade조건을 넣어서 만들었습니다.

문제는 A테이블의 row를 지우는동작이 실제 삭제가 아닌 A.deletedAt = true를 하기 때문에 cascade가 일어나지 않아 실제로 B, C테이블의 row는 아무런 효과를 받지 못합니다.


물론 위의 경우에서는 A.deletedAt = true를 해 줄때 B, C의 관련 row를 수동으로 지워주면 되긴 하지만, 테이블이 늘어나고 의존성이 증가할 경우 모든 경우를 다 고려해주기는 너무 복잡할 것 같습니다.


실제로 delete를 하지 않는 상황에 대한 보편적인 해결방법이 있을까요?

0
  • 답변 1

  • 쿠잉
    3k
    2020-12-04 16:08:15

    트리거를 통해서 a를 업데이트 해줄때 b,c도 같이 flag 업데이트를 delete=true 로 형태로 변경 하면 될것 같습니다.

  • 로그인을 하시면 답변을 등록할 수 있습니다.