작성
·
44
0
학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.
[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)
[질문 내용]
Hibernate:
create sequence Member_SEQ start with 1 increment by 50
Hibernate:
create table ADDRESS (
MEMBER_ID bigint not null,
city varchar(255),
zipcode varchar(255)
)
Hibernate:
create table FAVORITE_FOOD (
MEMBER_ID bigint not null,
FOOD_NAME varchar(255)
)
Hibernate:
create table Member (
MEMBER_ID bigint not null,
USERNAME varchar(255),
city varchar(255),
zipcode varchar(255),
primary key (MEMBER_ID)
)
Hibernate:
alter table if exists ADDRESS
add constraint FKsuulxb5rmrxvb83yr43ox86wn
foreign key (MEMBER_ID)
references Member
Hibernate:
alter table if exists FAVORITE_FOOD
add constraint FKjchfnr69biisfgjdpoe82rpa4
foreign key (MEMBER_ID)
references Member
위 그림에서 FAVORITE_FOOD 테이블에서 FOOD_NAME, ADDRESS 테이블에서 CITY, ZIPCODE 가 왜 PK가 되는지 궁금합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. Wendy Wendy님.
값 타입 컬렉션의 경우, JPA에서는 값 자체를 테이블의 기본 키로 두어야만 중복 저장을 방지할 수 있습니다. 이는 특정 멤버와 연결된 값 타입 컬렉션의 각 항목이 중복되지 않도록 하기 위한 것입니다. 그렇다면 왜 FOOD_NAME
과 CITY
, ZIPCODE
같은 컬럼들이 기본 키(PK)로 설정되는지에 대해 설명드리겠습니다.
FAVORITE_FOOD 테이블의 FOOD_NAME
:
MEMBER_ID
와 FOOD_NAME
은 복합 키(Composite Key)를 형성합니다. 이는 특정 멤버의 별도의 좋아하는 음식이 중복되지 않도록 하기 위해서입니다. MEMBER_ID
가 같은 경우에도 FOOD_NAME
이 다르면 별개로 저장할 수 있지만, 동일한 MEMBER_ID
와 FOOD_NAME
의 조합은 중복될 수 없습니다.ADDRESS 테이블의 CITY
, STREET
, ZIPCODE
:
MEMBER_ID
, CITY
, STREET
, ZIPCODE
의 조합이 해당 멤버에 대한 특정 주소를 유일하게 나타내도록 합니다. 동일한 주소를 중복으로 저장할 수 없게 하기 위해 이러한 컬럼들이 복합 키를 형성하게 됩니다.이러한 구조는 값 타입 컬렉션이 값의 중복을 허용하지 않는다는 JPA의 기본 설계 원칙에 따라 데이터의 무결성을 보장합니다. 컬렉션 내부의 동일한 값은 의미가 없기 때문에, 이러한 방식으로 관리합니다.
유사한 주제에 대해 토론한 게시물도 참고해보시면 더 많은 인사이트를 얻으실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.