복합키

김상진 ·2025년 2월 23일
0

CS

목록 보기
30/30

복합키란 무엇인가?

기본 키(Primary Key)란?

데이터베이스에서 기본 키(Primary Key, PK)는 테이블 내에서 각 행을 유일하게 식별할 수 있는 컬럼(혹은 컬럼들의 조합)을 의미합니다. 기본 키는 테이블에서 중복되지 않는 고유한 값을 가져야 하며, 보통 id와 같은 단일 컬럼을 기본 키로 설정하는 경우가 많습니다.

복합 키(Composite Key)란?

복합 키(Composite Key)는 두 개 이상의 컬럼을 결합하여 기본 키로 설정하는 방식입니다. 즉, 하나의 컬럼만으로는 유일한 값을 만들 수 없을 때, 여러 컬럼을 결합하여 고유성을 보장하는 방식입니다.

복합 키가 필요한 이유

일반적으로 id와 같은 단일 기본 키를 사용하는 것이 보편적이지만, 복합 키가 유용한 경우는 다음과 같습니다.

  1. 여러 컬럼을 조합하여 유일성을 보장해야 할 때

    • 예를 들어, 주문 테이블(order)에서 order_idproduct_id가 결합되어야 유일한 값을 생성할 때, 이 두 컬럼을 복합 키로 설정할 수 있습니다. 이 경우 두 개의 외래 키(order_idproduct_id)의 조합으로 각 주문 내 상품을 구별할 수 있습니다.
  2. 별도의 고유한 ID 컬럼을 만들 필요가 없을 때

    • 복합 키를 사용하면 의미 있는 컬럼들(예: order_id, product_id)을 조합하여 고유성을 보장할 수 있기 때문에, 단일 ID 컬럼을 추가하는 대신 더 직관적이고 의미 있는 방식으로 데이터를 표현할 수 있습니다. 예를 들어, 학생과 과목의 관계를 나타내는 enrollment 테이블에서는 학생 ID와 과목 ID만으로 복합키를 사용할 수 있습니다.

복합 키 설정 방법

Java에서 복합 키를 설정할 때는 @EmbeddedId 또는 @IdClass를 사용할 수 있습니다.

@EmbeddedId 사용 예시
@Embeddable
public class OrderProductId implements Serializable {
    private Long orderId;
    private Long productId;

    // 기본 생성자, getter, setter, equals, hashCode 구현 필수
}

@Entity
public class OrderProduct {
    @EmbeddedId
    private OrderProductId id;
}
@IdClass 사용 예시
@Entity
@IdClass(OrderProductId.class)
public class OrderProduct {
    @Id
    private Long orderId;

    @Id
    private Long productId;
}

복합 키 vs 외래 키(Foreign Key)

복합 키외래 키는 개념적으로 다릅니다.

  • 복합 키는 해당 테이블에서 두 개 이상의 컬럼을 결합하여 유일성을 보장하는 기본 키입니다. 이 경우, 두 컬럼이 결합되어 테이블 내에서 유일한 식별자를 형성합니다.
  • 외래 키(Foreign Key, FK)다른 테이블의 기본 키를 참조하는 컬럼으로, 테이블 간의 관계를 설정하는 데 사용됩니다. 예를 들어, order_product 테이블에서 order_idproduct_id가 외래 키라면, 이들 각각은 orderproduct 테이블의 기본 키를 참조하여 관계를 맺습니다.

복합 키 사용 시 고려할 점

복합 키를 사용하면 데이터베이스 설계를 보다 의미 있게 할 수 있습니다. 하지만, 복합 키를 사용할 때는 다음과 같은 점을 고려해야 합니다:

  1. 관리의 어려움: 복합 키는 관리가 번거로울 수 있습니다. 여러 컬럼을 조합하여 유일성을 보장하므로, 복합 키를 사용할 때는 각 컬럼들이 결합되어 고유성을 보장하는지 잘 검토해야 합니다.

  2. 사용 목적에 맞는 설계: 복합 키는 일반적으로 다대다(N:M) 관계에서 많이 사용됩니다. 예를 들어, 학생과목의 관계를 나타내는 수강 테이블에서는 복합 키가 적합할 수 있습니다.

  3. 효율적인 쿼리 설계: 복합 키를 사용하면 쿼리 성능에 영향을 미칠 수 있습니다. 예를 들어, 복합 키로 구성된 테이블에서 두 컬럼을 조건으로 검색할 때 인덱스 효율성이 높아지는 장점이 있지만, 그만큼 성능을 잘 고려한 인덱스 설계가 필요합니다.

정리

  • 기본 키는 각 행을 유일하게 식별하는 컬럼입니다.
  • 복합 키는 두 개 이상의 컬럼을 결합하여 유일성을 보장하는 키입니다.
  • 외래 키는 다른 테이블의 기본 키를 참조하여 테이블 간의 관계를 설정하는 데 사용됩니다.
  • 복합 키를 사용할 때는 의미 있는 컬럼 조합으로 유일성을 보장하면서, 관리의 어려움이나 성능 문제를 고려하는 것이 중요합니다.

복합 키를 언제 사용해야 할지 고민된다면, 단순히 ID를 추가하는 것보다 두 컬럼을 조합하여 고유성을 보장하는 것이 더 의미 있는지를 고려하는 것이 좋습니다.

profile
알고리즘은 백준 허브를 통해 github에 꾸준히 올리고 있습니다.🙂

0개의 댓글

관련 채용 정보