ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • MySQL - 외래키(Foreign Key)를 써야할까?
    Spring Boot/DB 2024. 8. 14. 01:46

     

    배경

    • 첫회사에서는 외래키가 DB의 성능 저하, 확장을 어렵게 만들고, 유연성을 잃게 만든다고 배웠다.
    • 이직한 회사에서는 외래키가 제공하는 정합성, 무결성 유지 편익이 외래키가 없는 것 보다 크다고 배웠다.
    • 외래키 없이 1년, 외래키 사용하며 1년을 보내며 느낀점을 남겨본다.

    최근 보고 있는 도서 real mysql 8.0애도 외래키를 사용하지 않는다는 내용이 실려있다.

    외래키를 쓰지 않는 이유 

     

    JPA에 연관관계는 만들지만, FK는 만들지 않는 옵션도 있다.

     

    결론

    • 기본적으로 외래키를 사용하지 않고 필요한 테이블에만 인덱스 또는 FK를 만들어 사용하는 것이 좋다.
      • 외래키가 주는 편익도 분명 크다.
    • 경험상 FK를 걸어도 정합성이 깨지는 곳은 깨진다.
    • 개발시 Validation을 최대한 꼼꼼하게 하여 불변식을 지킨다. (Domain단 또는 Controller단) 
    • 단, 외래키 없이 사용하고자 한다면 모든 Table에 audit 데이터를 남긴다. (createdAt, lastModifiedAt, 필요시 작성자, 수정자도) 또한 모든 테이블은 soft delete 상태 값을 가진다. (그래야 추적이 될 것 같다.)
    • 특히 초기 스타트업이라면 피봇팅으로 인해 설계가 변경될 일이 빈번하여 FK가 없는 편이 좋다고 생각한다. 
      • JPA 연관관계도 맺지 않고 유연하게 데이터를 관리한다. 
      • (JPA ManyToOne의 Many는 few지 Many가 아니다. 운영하며 데이터가 쌓이고 few가 확정되면 그때 JPA 연관관계를 맺어도 늦지 않다. 라고 Hibernate쪽에서 유명한 분이 하신 말에 동의한다. https://vladmihalcea.com/)

     
     
     

    반응형
Designed by Tistory.