Post

실무에서 DB 설계시 foreign key를 사용하지 않는 이유

프로젝트 진행하면서 db 연관관계를 설계하면서 foreign key를 어떤 식으로 연결 해야할지 고민을 많이했다. 그러던 중 github에서는 foreign key를 사용하지 않는다는 것을 보았다. 링크

이에 대해 한번 정리해보자.

foriegn key를 사용했을 때 발생할 수 있는 문제점

  • 외래 키는 데이터베이스 샤딩을 방해
  • 외래 키는 성능에 영향을 줌
    • 인덱스가 필요하다는 점은 괜찮지만, 삽입/삭제할 때마다 조회 작업이 추가되어 오버헤드가 발생할 수 있음
  • 외래 키는 온라인 스키마 마이그레이션과 잘 맞지 않음

이러한 이유에서 github에서는 foreign key를 사용하지 않는다고 한다.

다른 이유

  • 개발 시 불편함
    • foreign key를 사용하면 부모 테이블과 자식 테이블 관계가 있을 때 부모 테이블을 무조건 먼저 생성한 뒤 자식 테이블을 생성해야된다는 번거로움이 있음.

정리

  • foreign key는 rdb에서 매우 중요한 기능 중 하나이고 foreign key를 사용하면 다양한 이점을 누릴 수 있다.
  • 하지만 실무에서는 여러 문제들로 인해 foreign key를 걸지 않는다고 하니 이런 부분을 잘 생각해보자.
This post is licensed under CC BY 4.0 by the author.