본문 바로가기
Database/MYSQL

Foreign Key 에 대한 사용 유무 어떤게 좋을까?

by 반화넬 2025. 3. 21.
반응형

 
 

FK에 대한 기본적인 이야기

 

FK를 사용하지 않는 이유

FK는 한 테이블이 다른 테이블을 참조하는 제약 조건이라 데이터 무결성을 보장하여 안전한 데이터 관리가 가능하다. 그러나 성능 저하를 유발할수도 있고, 복잡도 때문에 데이터베이스 운영 난이도를 높일 수 있다.

성능 저하

FK를 사용하지 않는 경우보다 FK를 사용할 경우 데이터 변경 시 더 많은 lock을 유발하기 때문에 동시성이 높은 상황에서 성능 저하가 발생할 우려가 있다. 데이터 변경이 빈번한 경우 성능 저하에 대한 문제가 더 많이 발생할 수 있다.

유지 관리 어려움

FK를 사용하면 데이터 변경이나 삭제 시 관련된 각 테이블 간의 연관성을 고려해야 한다. 테이블의 수가 증가하고 관계가 더 복잡해질수록 데이터 수정 작업은 점점 어려워진다. 그리고 FK가 적용된 열에 데이터 타입 변경이 제한되거나 샤딩 등으로 여러 데이터베이스에 데이터가 분산될 때 유지 관리가 더 어렵다.

대신 FK를 사용하지 않는 경우, FK 제약 없이 참조 무결성을 유지할 수 있도록 시스템을 설계해야 한다.

FK를 사용하는 경우

주로 데이터 무결성이 중요한 은행이나 결제 도메인의 경우 FK를 사용한다. 그리고 데이터 변경이 빈번하지 않고 조회만 빈번할 경우에도 FK를 사용할 수 있습니다.

FK를 사용하지 않는 경우

많은 테이블이 있고 그 테이블 간의 관계가 복잡한 대규모 서비스의 경우, FK를 사용하면 운영 난이도가 훨씬 복잡해지기 때문에 대규모 서비스는 FK 사용을 지양하고 있다.
그리고 데이터 삭제와 같은 데이터 처리가 있을때 파티셔닝 기능을 사용에 어느정도의 데이터 무결성 확보가 가능하다고 판단하면 FK를 사용하지 않는다.


[참고 자료]
https://planetscale.com/docs/learn/operating-without-foreign-key-constraints#why-does-planetscale-not-recommend-constraints-

 

원본 : https://velog.io/@ollie221/Foreign-Key-%EC%8D%A8%EC%95%BC%ED%95%A0%EA%B9%8C-%EB%A7%90%EC%95%84%EC%95%BC-%ED%95%A0%EA%B9%8C

 

 

 

 
 

또다른 이야기

 

외래키(Foreign Key)는 데이터베이스에서 두 테이블 간의 관계를 정의할 때 사용하는 개념 외래키는 한 테이블의 필드(또는 컬럼)가 다른 테이블의 기본 키(Primary Key)를 참조할 때 사용 이렇게 하는 것으로 데이터의 일관성과 무결성이 보장되지만, 몇 가지 단점 또는 고려사항들이 있음

 

1. 성능 문제 외래키를 사용하면 INSERT, UPDATE, DELETE 작업 시 해당 테이블뿐만 아니라 참조하는 테이블까지 확인해야 함. 이로 인해 작업 속도가 느려질 수 있음.

 

2. 복잡성 증가 외래키 관계를 설정하면 데이터베이스 구조가 복잡해질 수 있음. 이로 인해 쿼리 작성이나 데이터베이스 관리가 어려워질 수 있음.

 

3. 삭제 제한 외래키로 참조되는 테이블의 데이터를 삭제하려고 할 때, 그 데이터를 참조하는 다른 테이블의 데이터가 존재하면 삭제가 불가능함. 이를 '캐스캐이드 삭제' 옵션으로 해결할 수 있지만, 잘못된 설정으로 데이터 손실의 위험이 있음.

 

4. 데이터 추가 제한 참조하는 테이블에 없는 값을 외래키 컬럼에 입력하려고 하면 오류가 발생함. 이는 데이터의 무결성을 위한 것이지만, 때로는 데이터 입력이 제한되는 상황이 발생할 수 있음.

 

5. 데이터 이관의 어려움 외래키 관계가 설정된 테이블의 데이터를 다른 데이터베이스나 시스템으로 이관할 때 순서와 방법을 신중히 고려해야함.

 

6. 변경의 어려움 나중에 데이터베이스 구조를 변경하거나 수정할 때, 외래키 때문에 간접적으로 많은 테이블들에 영향을 줄 수 있음.

반응형