DB 설계(외래키+CascadeType, 수동 인덱싱)

wish17·2023년 6월 22일
0

서론

버그성 데이터 지우기를 하며 과도한 외래키 사용으로 문제를 겪고 앞으로는 이런 상황을 방지하기 위해서 질문을 했었다. 멘토님께 듣기로 현업에서는 foreign키를 거의 사용하지 않는다고 한다. 대신 일일이 인덱싱하는 과정을 통해 테이블과 컬럼을 연결한다고 하는데 두 방법의 차이점과 장단점이 무엇일지 궁금해서 알아봤다.

외래키 및 CascadeType 사용

외래키를 사용하여 테이블 간의 관계를 설정하면 데이터베이스에서 자동으로 관련 데이터를 연결하고 유지하는 방법이다.

  • CascadeType를 설정하면 부모 엔티티의 변경 사항이 자식 엔티티에 전파된다.
    • ex) 부모 엔티티가 삭제되면 연결된 자식 엔티티도 자동으로 삭제 됨
    • 이러한 방식은 개발자가 관계를 다루는 데 편리하며, 데이터 일관성과 무결성을 유지하는 데 도움이 됨

장점

  • 자동으로 관련 데이터를 처리하기 때문에 일부 작업을 간소화하고 오류 가능성을 줄일 수 있다.

단점

  • 연결된 데이터를 로드할 때 성능상의 이슈가 발생할 수 있으며, 복잡한 관계를 처리할 때 코드와 쿼리가 복잡해질 수 있다.

수동 인덱싱

수동으로 인덱싱하여 관계를 설정하는 방법

장점

  • 외래키 및 CascadeType를 사용하는 방식보다 더 많은 제어를 할 수 있다.

    • 수동 인덱싱을 사용하면 관련 데이터를 더 세밀하게 제어할 수 있으며, 복잡한 비즈니스 규칙을 적용하는 데 유용할 수 있다.
  • 필요한 경우 관련 데이터를 수동으로 로드하고 처리할 수 있다.

  • 성능 면에서는 일부 경우에는 수동 인덱싱이 더 효율적일 수 있다.

    • ex) 대량의 데이터를 일괄 처리해야 할 때 불필요한 관련 데이터 로드를 방지할 수 있음

단점

  • 개발자가 모든 관련 데이터 처리를 수동으로 관리해야 하므로 코드 작성과 유지보수에 더 많은 노력이 필요 (=공수가 낭비되는 면이 있음)

정리(요약)

외래키 및 CascadeType를 사용하여 관계를 설정하면 편리하고 데이터 일관성을 유지하는 데 도움이 된다. 성능 면에서는 대량의 데이터 처리 시 일부 제약이 있을 수 있다. 수동 인덱싱은 더 많은 제어를 제공하고 성능을 최적화할 수 있지만, 코드 작성과 유지보수에 더 많은 공수가 소요된다.

0개의 댓글