1. 개요
프로젝트 코드 리뷰를 하다가, `@JoinColumn(name =" ", referecedColumnName= " ")`을 보고 "referecedColumnName? 이게 뭐지??" 하는 생각에 구글링을 해 찾아보았다.
그러던 중, 김영한님 강의에서의 좋은 Q&A가 있어 '간략하게나마 정리해야겠다' 라는 마음에 글을 쓰게 됐다.
그럼 지금까지 프로젝트를 할 때 `@JoinColumn(name =" ")으로만 외래키(FK)에 대한 연관관계 매핑을 했었는데, 이번에 보게 된 referecedColumnName는 무엇일까??
2. @JoinColumn 이란?
들어가기 전, @JoinColumn에 대해서 간략히 복습해보자.
@JoinColumn은 Entity 간의 연관관계 매핑할 때 사용하는 어노테이션으로,
연관관계의 주인(보통 多) Entity에서 FK로 정의하고 사용된다.
https://wch-0625.tistory.com/24
1) 속성
name
- 외래키(FK)로 사용될 컬럼의 이름
referencedColumnName
- 외래키(FK)가 조인할 대상 테이블의 column
- 생략 시, 대상 테이블의 기본키(PK)로 자동 지정됨.
2) 예시
------------ 테이블 ------------
Member
- memberId(PK)
- teamId(FK)
Team
- teamId(PK)
------------- 객체 -------------
Member {
@JoinColumn(name="teamId")
Team team;
}
이 예시에서는 referencedColumnName이 생략되었기 때문에, Team 테이블의 PK로 자동 지정된다.
따라서 "Member.teamId(FK) -> Team.teamId(PK)"를 조인하면서 연관관계가 처리된다.
referencedColumnName을 PK가 아닌 다른 컬럼에 직접 지정할 수도 있지만 정규화 관점에서 권장하지는 않는다.
이처럼 DB에서 참조 무결성을 유지하기 위해, FK는 일반적으로 다른 테이블의 PK를 참조한다.
따라서 FK가 PK 값이 아닌 다른 컬럼을 참조하게 되면 데이터의 무결성이 깨질 수도 있고, 해당 컬럼에 대한 인덱스 또한 없을 가능성이 높아 성능이 저하될 수도 있다.
따라서 referencedColumnName를 생략하여, FK가 연관관계 테이블의 PK를 참조하도록 두는 것이 좋다.
참고문헌.
'Spring > 끄적끄적' 카테고리의 다른 글
Spring Boot에서의 엑셀 다운로드 API (0) | 2024.07.20 |
---|---|
HttpURLConnection, RestTemplate, WebClient 비교 (0) | 2024.07.11 |
WebClient 네이버 지도 비동기 API 호출하기 (2) (1) | 2024.05.20 |
WebClient 네이버 지도 비동기 API 호출하기 (1) (0) | 2024.05.20 |