강의

멘토링

로드맵

Inflearn brand logo image

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

Wendy Wendy님의 프로필 이미지
Wendy Wendy

작성한 질문수

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

값 타입 컬렉션

값 타입 컬렉션 PK

작성

·

44

0

학습하는 분들께 도움이 되고, 더 좋은 답변을 드릴 수 있도록 질문전에 다음을 꼭 확인해주세요.

[질문 템플릿]
1. 강의 내용과 관련된 질문인가요? (예)
2. 인프런의 질문 게시판과 자주 하는 질문에 없는 내용인가요? (예)
3. 질문 잘하기 메뉴얼을 읽어보셨나요? (예)

[질문 내용]

image.png
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_NAMECITY, ZIPCODE 같은 컬럼들이 기본 키(PK)로 설정되는지에 대해 설명드리겠습니다.

  1. FAVORITE_FOOD 테이블의 FOOD_NAME:

    • 이 테이블에서 MEMBER_IDFOOD_NAME은 복합 키(Composite Key)를 형성합니다. 이는 특정 멤버의 별도의 좋아하는 음식이 중복되지 않도록 하기 위해서입니다. MEMBER_ID가 같은 경우에도 FOOD_NAME이 다르면 별개로 저장할 수 있지만, 동일한 MEMBER_IDFOOD_NAME의 조합은 중복될 수 없습니다.
  2. ADDRESS 테이블의 CITY, STREET, ZIPCODE:

    • 마찬가지로, MEMBER_ID, CITY, STREET, ZIPCODE의 조합이 해당 멤버에 대한 특정 주소를 유일하게 나타내도록 합니다. 동일한 주소를 중복으로 저장할 수 없게 하기 위해 이러한 컬럼들이 복합 키를 형성하게 됩니다.

이러한 구조는 값 타입 컬렉션이 값의 중복을 허용하지 않는다는 JPA의 기본 설계 원칙에 따라 데이터의 무결성을 보장합니다. 컬렉션 내부의 동일한 값은 의미가 없기 때문에, 이러한 방식으로 관리합니다.

유사한 주제에 대해 토론한 게시물도 참고해보시면 더 많은 인사이트를 얻으실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

Wendy Wendy님의 프로필 이미지
Wendy Wendy

작성한 질문수

질문하기