728x90
반응형
Database를 구성할때 Entity의 ID는 하나로 구성하기도 하지만 테이블의 여러 필드를 이용해 복합키를 만들기도 한다. 이러한 복합키를 쓰는 이유와 사용하는 방법에 대해서 알아보고자 한다.
복합키를 사용했을 때 장점
1. 고유성 및 식별성 강화
복합키는 여러 열을 조합하여 구성되기 때문에 단일 열의 경우보다 높은 고유성과 식별성을 제공할 수 있다. 특히, 개별 열의 값이 중복되더라도 조합된 복합키는 고유한 식별자로 사용될 수 있고, 이는 특정 레코드를 정확하게 식별하고 조회하는 데 유용하며, 데이터의 정확성과 일관성을 유지하는 데 도움이 된다.
2. 검색 및 정렬 효율성 향상
복합키는 여러 열을 기반으로 하기 때문에 특정 열 하나로만 기준을 정하는 단일 키보다는 더 다양한 검색 및 정렬 옵션을 제공한다. 이는 데이터베이스에서 다양한 질의에 대해 빠른 응답을 가능하게 하며, 특히 복합키의 각 구성 요소가 데이터 접근 패턴에 잘 부합하는 경우 성능을 향상시킬 수 있다.
3. 다양한 관계 모델링 가능
복합키는 여러 열을 포함하므로 여러 열 간의 관계를 모델링하는 데 유용하다. 예를 들어, 두 열의 조합이 다른 테이블과의 외래 키로 사용될 수 있으며, 이를 통해 데이터 간의 다양한 복잡한 관계를 표현할 수 있다. 이는 데이터베이스 설계를 더 유연하게 만들어 새로운 요구 사항에 더 적응적으로 대응할 수 있게 한다.
IdClass를 이용한 복합키 사용법
DepartmentEmployee.java
@Getter
@IdClass(DepartmentEmployeePK.class)
@Table(name = "dept_emp")
@Entity
public class DepartmentEmployee {
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "emp_no")
private Employees employee;
@Id
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "dept_no")
private Departments departments;
@Column(name = "from_date")
private LocalDate fromDate;
@Column(name = "to_date")
private LocalDate toDate;
}
DepartmentEmployeePK.java
@Data
public class DepartmentEmployeePK implements Serializable {
private Employees employee;
private Departments departments;
}
728x90
반응형
'SpringBoot' 카테고리의 다른 글
[SpringBoot/스프링부트] Prometheus와 Grafana를 이용한 서버 모니터링 (0) | 2024.04.12 |
---|---|
[SpringBoot/스프링부트] Record (0) | 2024.02.27 |