Categories: DataBase

SQL 복합키 (Composite Key) 설정하기

복합키란?

SQL에서 복합키(Composite Key)란, 두 개 이상의 칼럼(Column)을 기본키(Primary Key)로 결합하여 테이블 내의 각 레코드(Record)를 유일하게 식별하는 데 사용되는 키(Key)입니다. 복합키는 단일 칼럼으로는 레코드를 유일하게 식별할 수 없는 경우에 주로 사용됩니다. 이러한 키는 데이터베이스에서 데이터 무결성(Integrity)을 유지하고, 중복을 방지하는 중요한 역할을 합니다.

복합키 특징

복합키는 두 개 이상의 칼럼을 기본키로 결합하여 구성됩니다. 예를 들어, 학교 데이터베이스의 ‘성적’ 테이블에서는 ‘학생 ID’ 와 ‘과목 코드’ 의 조합을 사용하여 각 성적 레코드를 구분할 수 있습니다. 여기서 ‘학생 ID’ 와 ‘과목 코드’ 는 각각 단독으로는 레코드를 구분하는 데 충분하지 않지만, 함께 결합될 때 각 성적 레코드를 유일하게 식별합니다.

  • 유일성: 복합키는 레코드를 명확하게 식별하기 위해 사용되므로, 키의 조합은 테이블 내에서 유일해야 합니다.
  • 정규화: 복합키는 데이터베이스의 정규화 과정에서 중요한 역할을 합니다. 이를 통해 데이터 중복을 줄이고, 데이터의 무결성을 보장할 수 있습니다.
  • 관계 설정: 복합키는 테이블 간의 관계를 정의하는 데 사용되기도 합니다. 예를 들어, 여러 테이블에 걸쳐 있는 같은 요소들을 연결하는 데 사용될 수 있습니다.

복합키의 장단점 및 고려사항

장점

  1. 데이터 무결성 유지: 복합키를 사용함으로써 여러 칼럼의 조합으로 레코드의 유일성을 보장할 수 있습니다. 이는 데이터의 정확성과 무결성을 유지하는 데 도움이 됩니다.
  2. 상세한 구별: 단일 칼럼으로는 구별할 수 없는 레코드들을 복합키를 통해 구별할 수 있습니다. 이는 더 세밀한 데이터 관리를 가능하게 합니다.
  3. 관계의 명확한 표현: 복합키는 데이터 간의 관계를 더 명확하게 표현할 수 있습니다. 특히, 다대다 관계에서 중요한 역할을 합니다.

단점

  1. 복잡성 증가: 복합키를 사용하면 데이터베이스 설계가 더 복잡해질 수 있습니다. 키 관리와 쿼리 작성이 더 어려워질 수 있습니다.
  2. 성능 문제: 복합키가 포함된 쿼리는 단일키를 사용할 때보다 처리 속도가 느릴 수 있습니다. 특히, 복합키가 많은 칼럼으로 구성되어 있을 경우 더 그렇습니다.
  3. 유지보수의 어려움: 복합키를 사용하는 경우, 키 구조의 변경이나 키에 포함된 칼럼의 변경이 더 복잡하고 어려울 수 있습니다.

복합키를 사용할 때는 몇 가지 중요한 사항을 고려해야 합니다. 복합키는 쿼리의 복잡성을 증가 시킬 수 있으며, 데이터베이스의 성능에 영향을 줄 수 있습니다. 또한, 복합키의 칼럼 수가 많을수록, 해당 키를 관리하고 사용하는 데 더 많은 주의가 필요합니다.

복합키의 구현

SQL에서 복합키는 다음과 같이 구현할 수 있습니다.

SQL
CREATE TABLE 성적 (
    학생ID INT,
    과목ID INT,
    점수 INT,
    PRIMARY KEY (학생ID, 과목ID)
);
SQL

이 예에서, ‘성적’ 테이블의 기본키는 ‘학생ID’와 ‘과목ID’의 조합으로 이루어져 있습니다. 이 조합은 테이블 내에서 각 성적 레코드를 유일하게 식별합니다.

복합키 예제 및 활용

복합키는 데이터베이스의 두 개 이상의 칼럼을 결합하여 유일한 식별자로 사용하는 방법입니다. 이를 통해 각 레코드가 유니크함을 보장할 수 있습니다.

복합키 예제

예를 들어, 학교에서 학생들의 수업 등록 정보를 관리하는 시스템을 생각해 볼 수 있습니다. 이 시스템에서는 하나의 수업에 여러 학생이 등록할 수 있으며, 한 학생이 여러 수업에 등록할 수 있습니다. 이 경우, ‘학생ID’와 ‘수업ID’의 조합을 사용하여 각 등록을 유니크하게 식별할 수 있습니다.

테이블

학생ID수업ID등록일
101C1012024-03-01
102C1022024-03-02
101C1022024-03-03
103C1012024-03-04

이 테이블에서 ‘학생ID’와 ‘수업ID’의 조합은 복합키 역할을 합니다. 같은 학생이 동일한 수업에 여러 번 등록하는 것을 방지하고, 각 레코드를 유니크하게 만듭니다.

복합키 활용법

  1. 데이터 무결성 보장: 복합키는 데이터베이스의 무결성을 유지하는 데 중요한 역할을 합니다. 위 예제에서는 동일 학생이 같은 수업에 중복 등록되는 것을 방지합니다.
  2. 관계 설정: 복합키는 다대다 관계를 표현하는 데 자주 사용됩니다. 예를 들어, 하나의 학생이 여러 수업에 등록하고, 하나의 수업에 여러 학생이 등록될 수 있습니다.
  3. 쿼리 작성 시 활용: 복합키는 쿼리를 작성할 때 특정 레코드를 타깃으로 삼거나 관계를 파악하는 데 유용합니다. 예를 들어, 특정 학생이 등록한 모든 수업을 찾거나, 특정 수업에 등록된 모든 학생을 찾는 쿼리를 작성할 수 있습니다.

복합키의 사용은 데이터의 정확성과 무결성을 보장하는 한편, 데이터베이스 설계와 쿼리 작성에 있어 추가적인 고려가 필요함을 의미합니다. 따라서 데이터베이스를 설계할 때는 이러한 장단점을 균형 있게 고려해야 합니다.

결론

복합키(Composite Key)는 데이터베이스에서 두 개 이상의 칼럼을 기본키(Primary Key)로 결합해 유일한 레코드 식별자로 사용합니다. 이는 데이터의 상세한 구별과 무결성 유지에 중요하지만, 복잡성 증가와 성능 저하의 가능성도 있어 설계 시 신중한 고려가 필요합니다. 따라서, 복합키 사용은 데이터베이스의 목적과 요구 사항에 맞춰 결정되어야 합니다.

suover

Recent Posts

실용적인 테스트 가이드: @Mock, @MockBean, @Spy, @SpyBean, @InjectMocks

테스트 시 의존성 주입(Dependency Injection)과 Mockito Spring 애플리케이션을 개발하다 보면, 테스트 코드에서 실제 빈(Bean)을 사용하지…

7일 ago

실용적인 테스트 가이드: Layered Architecture 레이어드 아키텍처

들어가며 스프링 기반 프로젝트에서 좋은 설계 구조와 테스트 전략은 소프트웨어 품질과 유지보수성에 직결됩니다. 최근 학습한…

1주 ago

읽기 좋은 코드를 작성하는 사고법: 논리, 사고의 흐름과 SOLID

들어가며 코드를 작성할 때 종종 "이 로직을 어떻게 단순하고 읽기 쉽게 표현할 수 있을까?" 고민하게…

4주 ago

읽기 좋은 코드를 작성하는 사고법: 추상과 구체

들어가며 코드를 작성하다 보면 "왜 이 코드는 한눈에 이해가 안 될까?" 하는 고민을 종종 하게…

4주 ago

HTTP 상태코드 총정리 서버-클라이언트 간 명확한 의사소통

HTTP 상태코드란 무엇인가? HTTP 상태코드(HTTP Status Code)는 서버가 클라이언트의 요청을 처리한 결과를 수치화된 코드로 나타내는…

1개월 ago

HTTP 메서드 완벽 가이드 GET, POST, PUT, PATCH, DELETE 등 총정리

HTTP란 무엇인가? HTTP(Hypertext Transfer Protocol)는 웹에서 데이터를 주고받기 위해 사용하는 응용 계층 프로토콜입니다. 우리가 브라우저에서…

1개월 ago