[JPA] 복합 식별키를 update 해야할 때

2021. 10. 20. 22:19개발공부/DB

복합 식별키를 update 해야할 때

A, C가 다대다로 연결되어 있고 B는 두 엔티티를 매핑해주는 매핑 엔티티 입니다. 이 때 한 A 엔티티의 데이터가 연관된 C 엔티티 데이터와의 관계를 끊고, 다른 C 엔티티 데이터에 관계를 맺는다 하면(말은 어렵지만 fk가 바뀐다고 이해하시면 됩니다) 기존 복합키는 삭제해야할까요?

실무에서 직접 나온 고민입니다. 평소대로라면 DB 데이터 안정성과 로그용도로 DeletedTime을 남기고 실제 row를 삭제하진 않았지만, 다대다 관계의 매핑 테이블로만 사용되는 테이블의 데이터를 남겨둘 필요가 없다라는 관점에서 생각해봤습니다.

먼저 실제 row를 삭제하지 않는 이유는 데이터가 오류로 인해 소실되는 부분을 방지하기 위함이거나, 데이터를 남겨 나중에 확인할 가치가 있는 것일 때라고 생각합니다.

다대다 관계의 매핑테이블 용도로 사용되는 현재 테이블의 경우 오류로 인해 소실되는 부분은 분명 리스크이지만, 매핑테이블의 구조가 복합 식별키로 단순 데이터가 아닌 매핑구조를 가지기 때문에 업데이터가 아닌 삭제 후 재생성이 맞다고 봤습니다. 그리고 매핑테이블 데이터가 나중에 확인할 가치가 있는 데이터인지 따져보았을 때 아니다라는 답이 나오기 때문에 삭제하기로 결정했습니다.

복합키는 고유한 식별키가 없을 때, 하나의 속성으로는 기본키를 만들 수 없을 때 두 컬럼을 복합키로 만들어 유일성을 보장해주는 방식입니다. 대리키를 사용해 fk로 두면되지 않냐구요? 저도 그렇게 생각합니다. 대리키를 두면 복합키가 가지는 한계, 중복이 발생할 수 있어 update나 insert에 제한이 생길 수 있다를 어느정도 극복할 수 있다고 봅니다.

현 테이블은 대리키가 없기 때문에 복합 식별키(fk + pk)를 삭제하고 새로운 관계 row를 추가하는 게 맞습니다.