인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

alrnr3521님의 프로필 이미지
alrnr3521

작성한 질문수

자바 ORM 표준 JPA 프로그래밍 - 기본편

값 타입 컬렉션

2분24초

작성

·

347

1

FAVORITE_FOOD랑 ADDRESS에서
MEMBER_ID가 FK인건 알겠는데 어떻게 PK가 되는거죠?
@JoinColumn으로 외래키랑 매핑하는건 알겠는데
MEMBER_ID가 PK 되는 과정이 궁금합니다.

답변 1

0

김영한님의 프로필 이미지
김영한
지식공유자

안녕하세요. alrnr3521님

데이터베이스 테이블에는 항상 PK가 필요합니다.

예를 들어서 FAVORITE_FOOD에서 MEMBER_ID를 PK로 잡지 않으면 FOOD_NAME만 PK로 잡게 되는데요. 이렇게 되면 다른 사용자는 같은 음식 이름을 가질 수 없겠지요?

혹시 관련 내용이 잘 이해가 되지 않으면 데이터베이스 기본에 대한 학습이 필요합니다.

도움이 되셨길 바래요^^

alrnr3521님의 프로필 이미지
alrnr3521
질문자

근데 7분39초에 보면 Member테이블은 아래에 primary key (MEMBER_ID)로 PK가 생성됐는데 FAVORITE_FOOD는 PK를 언제잡는건가요?

안녕하세요~ 제 생각에 영한님 말씀을 정리하자면 일단 하나의 테이블은 하나의 pk만 들고 있을 수 있어요. 근데 하나의 칼럼이 하나의 pk가 되는 건 아니에요. 2개의 칼럼이 조합되어서 하나의 pk로 쓰일 수 있거든요

create table test(
id int auto_increment,
food varchar(255),
constraint test_PK primary key(id,food)
)

이렇게 말이죠

이렇게 되었을 땐 아이디 + 음식 = 하나의 pk로 잡혀서 여러 유저의 음식 이름이 중복 되어도 아이디 값이 다르니 값이 허용 되는거에요. 음식 이름으로만 pk를 잡으면(테이블은 하나의 pk를 무조건 들고 있어야 함 ) 서로 다른 유저가 같은 음식을 좋아할 수 없겠지요.

근데 jpa 로 쿼리를 날려보면 이렇게 pk를 설정하는 부분은 보이지 않아요 이건 따로 ddl에서 설정을 해야해요.

alrnr3521님의 프로필 이미지
alrnr3521
질문자

아 그렇군요 저는 jpa에서 자동으로 해주는 건줄 알았습니다 ㅎㅎ 답변 감사합니다!

김영한님의 프로필 이미지
김영한
지식공유자

시언 박님 답변 감사합니다^^

alrnr3521님의 프로필 이미지
alrnr3521

작성한 질문수

질문하기