스터디 노트
[📝 DB] 외래 키(FK) 설정의 주요 이유
데구루_
2025. 6. 27. 16:38
- 참조 무결성 보장 (Referential Integrity)
- 정의: 참조 무결성은 한 테이블의 외래 키 값이 다른 테이블의 기본 키(Primary Key, PK) 또는 고유 키(Unique Key) 값을 참조할 때, 그 참조되는 값이 데이터베이스에 실제로 존재해야 한다는 규칙입니다.
- 예시: 주문 테이블에 고객ID라는 외래 키가 있고, 이 키가 고객 테이블의 고객ID(기본 키)를 참조한다고 해볼게요. 외래 키가 없으면 존재하지 않는 고객ID (예: 999번 고객)로 주문이 생성될 수 있습니다. 하지만 외래 키를 설정하면, 고객 테이블에 999번 고객이 존재하지 않는 한, 주문 테이블에 999번 고객의 주문을 추가할 수 없도록 강제합니다. 이로써 유효하지 않은 데이터가 생성되는 것을 방지할 수 있습니다.
- 삭제/수정 방지: 또한, 외래 키로 참조되고 있는 고객 테이블의 특정 고객ID (예: 100번 고객)를 고객 테이블에서 함부로 삭제하거나 변경할 수 없게 만듭니다. 만약 삭제해야 한다면, 먼저 해당 고객의 모든 주문 데이터를 삭제하거나 변경해야 합니다. 이는 데이터가 갑자기 사라지거나 변경되어 참조 관계가 깨지는 것을 막아줍니다.
- 정의: 참조 무결성은 한 테이블의 외래 키 값이 다른 테이블의 기본 키(Primary Key, PK) 또는 고유 키(Unique Key) 값을 참조할 때, 그 참조되는 값이 데이터베이스에 실제로 존재해야 한다는 규칙입니다.
- 데이터 일관성 유지 (Data Consistency)
- 외래 키는 테이블 간의 관계를 명확하게 정의하고, 이 관계에 따라 데이터가 항상 유효하고 일관된 상태를 유지하도록 돕습니다.
- 예를 들어, 게시물 테이블과 댓글 테이블이 있을 때, 댓글 테이블의 게시물ID가 게시물 테이블의 게시물ID를 참조하도록 외래 키를 설정합니다. 이렇게 하면 댓글이 항상 존재하는 게시물에만 달릴 수 있고, 게시물이 삭제될 경우 해당 게시물에 달린 댓글도 같이 삭제되거나(CASCADE 옵션), 댓글이 있으면 게시물 삭제를 막거나(RESTRICT 옵션) 하는 등의 일관된 규칙을 적용할 수 있습니다.
- 외래 키는 테이블 간의 관계를 명확하게 정의하고, 이 관계에 따라 데이터가 항상 유효하고 일관된 상태를 유지하도록 돕습니다.
- 관계형 데이터베이스의 핵심 원리 구현
- 외래 키는 관계형 데이터베이스의 핵심 개념 중 하나인 관계(Relationship) 를 실제로 구현하는 메커니즘입니다. 테이블들이 독립적으로 존재하는 것이 아니라, 서로 의미 있는 관계로 묶여 있음을 명시적으로 보여줍니다.
- 이를 통해 데이터 모델의 설계 의도를 명확하게 할 수 있고, 데이터베이스 구조를 이해하는 데 도움이 됩니다.
- 외래 키는 관계형 데이터베이스의 핵심 개념 중 하나인 관계(Relationship) 를 실제로 구현하는 메커니즘입니다. 테이블들이 독립적으로 존재하는 것이 아니라, 서로 의미 있는 관계로 묶여 있음을 명시적으로 보여줍니다.
- 데이터 조작 시 오류 감소
- 데이터 삽입, 업데이트, 삭제와 같은 DML(Data Manipulation Language) 작업 시, 외래 키 제약 조건은 의도치 않은 오류를 방지합니다. 개발자가 실수로 유효하지 않은 데이터를 넣으려고 해도, 데이터베이스 시스템이 이를 자동으로 차단해주므로 개발 부담을 줄이고 애플리케이션의 견고성을 높일 수 있습니다.
- 데이터 삽입, 업데이트, 삭제와 같은 DML(Data Manipulation Language) 작업 시, 외래 키 제약 조건은 의도치 않은 오류를 방지합니다. 개발자가 실수로 유효하지 않은 데이터를 넣으려고 해도, 데이터베이스 시스템이 이를 자동으로 차단해주므로 개발 부담을 줄이고 애플리케이션의 견고성을 높일 수 있습니다.
외래 키 설정 시 고려사항
외래 키는 데이터 무결성을 강력하게 보장해주지만, 항상 좋은 점만 있는 것은 아닙니다.
- 성능 오버헤드: 데이터 삽입, 수정, 삭제 시 외래 키 제약 조건을 검사해야 하므로 약간의 성능 저하가 발생할 수 있습니다. 특히 트랜잭션이 매우 빈번한 시스템에서는 신중하게 고려해야 합니다.
- 복잡성: 복잡한 외래 키 관계는 데이터베이스 설계 및 유지보수를 어렵게 만들 수 있습니다.
이러한 이유 때문에, 때로는 성능상의 이유나 특정 데이터의 특성(예: 로그성 데이터)으로 인해 외래 키 제약 조건을 설정하지 않거나, 애플리케이션 레벨에서 무결성을 직접 처리하기도 합니다. 하지만 일반적인 비즈니스 애플리케이션에서는 데이터의 신뢰성을 위해 외래 키 설정을 적극적으로 활용하는 것이 권장됩니다.