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

이수찬님의 프로필 이미지

작성한 질문수

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

외래키가 "다" 쪽에 있어야 하는 이유에 대한 이해가 부족합니다.

해결된 질문

22.10.06 19:28 작성

·

708

0

영한님께서 일대다[1:N]강의에서 1:40 ~ 1:50초 사이에 DB설계관점에서 보면 외래키가 다쪽에

외래키가 들어가는것이 좋으며, team쪽에 memberId가 있으면 team을 계속 insert해야하며,

team이 중복이 되어 1이 아닌 N이 된다고 하셨는데 이 부분들이 이해하기가 어려웠습니다.

외래키가 "다"쪽에 있으면 좋은 이유들과 이 부분들의 이해가 부족할 때 어떤 것들을 공부하면 좋을것 같을지도 알려주시면 감사하겠습니다.

영한님의 좋은 강의 덕분에 처음 듣는 내용들인데도, 이해가 잘돼서 너무 좋네요. 좋은 강의 감사합니다

 

답변 1

8

y2gcoder님의 프로필 이미지

2022. 10. 07. 11:27

안녕하세요. 이수찬님, 공식 서포터즈 y2gcoder입니다.

Team과 Member가 1:N의 관계일 때 Team에 member_id가 외래키로 있다고 가정해보겠습니다. 이 때의 궁극적인 문제점은 결국 Member가 추가되거나 변경될 때마다 Team을 건드려야 한다는 점입니다.

  1. Team에 member_id 필드를 외래키로 설정해놓았다면, 새로운 member 가 생길 때마다 그 Member의 id를 외래키로 가지는 Team의 row를 생성해주어야 합니다. teamA(팀 이름) 에 member가 3명 있다면 Team 테이블에는 teamA라는 teamA라는 팀 이름을 가진 row를 3개나 만들어야 합니다. Member에 team_id라는 외래키가 있을 때는 member를 추가할 때마다 Member 테이블에만 row를 추가하면 됩니다. 이는 member의 team을 변경할 때도 마찬가지로 적용됩니다. 결국 Member를 건들면 Team도 같이 건들게 되는 비효율적인 작업이 필요합니다.

  2. 또한 teamA을 하나의 팀인데 member에 의해 Team 테이블에 중복으로 추가된다면 테이블 구조상으로 볼 때 teamA라는 이름을 가진 팀이 3개 있다는 뜻이랑 같습니다. 이는 Team의 관점에서 볼 때 의도한 것이 아니겠지요?

 

이러한 부분을 이해하려면 결국 관계형 DB에 대한 공부가 필요합니다. 관계형 DB에서는 그 이름처럼 관계를 잘 짜야하기 때문에 관계형 DB의 설계, 관계에 대해 공부하시는 것이 필요합니다. 결국 JPA도 DB를 사용하는 ORM이기 때문에 잘 사용하기 위해서는 DB에 대한 공부가 필요합니다.


감사합니다.