외래키가 "다" 쪽에 있어야 하는 이유에 대한 이해가 부족합니다.
영한님께서 일대다[1:N]강의에서 1:40 ~ 1:50초 사이에 DB설계관점에서 보면 외래키가 다쪽에
외래키가 들어가는것이 좋으며, team쪽에 memberId가 있으면 team을 계속 insert해야하며,
team이 중복이 되어 1이 아닌 N이 된다고 하셨는데 이 부분들이 이해하기가 어려웠습니다.
외래키가 "다"쪽에 있으면 좋은 이유들과 이 부분들의 이해가 부족할 때 어떤 것들을 공부하면 좋을것 같을지도 알려주시면 감사하겠습니다.
영한님의 좋은 강의 덕분에 처음 듣는 내용들인데도, 이해가 잘돼서 너무 좋네요. 좋은 강의 감사합니다
답변 1
8
안녕하세요. 이수찬님, 공식 서포터즈 y2gcoder입니다.
Team과 Member가 1:N의 관계일 때 Team에 member_id가 외래키로 있다고 가정해보겠습니다. 이 때의 궁극적인 문제점은 결국 Member가 추가되거나 변경될 때마다 Team을 건드려야 한다는 점입니다.
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도 같이 건들게 되는 비효율적인 작업이 필요합니다.
또한 teamA을 하나의 팀인데 member에 의해 Team 테이블에 중복으로 추가된다면 테이블 구조상으로 볼 때 teamA라는 이름을 가진 팀이 3개 있다는 뜻이랑 같습니다. 이는 Team의 관점에서 볼 때 의도한 것이 아니겠지요?
이러한 부분을 이해하려면 결국 관계형 DB에 대한 공부가 필요합니다. 관계형 DB에서는 그 이름처럼 관계를 잘 짜야하기 때문에 관계형 DB의 설계, 관계에 대해 공부하시는 것이 필요합니다. 결국 JPA도 DB를 사용하는 ORM이기 때문에 잘 사용하기 위해서는 DB에 대한 공부가 필요합니다.
감사합니다.
벌크연산에서 member.getAge 호출 시 영속성 컨텍스트에서 데이터를 가져오는건가요?
0
28
2
inheritance startegy 선택시 고려사항
0
22
1
Entity 동등성 비교
0
21
1
실무 조언 관련 질문입니다.
0
47
1
H2데이터베이스 파일 생성
0
56
2
서브쿼리 강의에서 ALL 예시 관련 질문드립니다.
0
53
2
수정또는 삭제시 영속성 엔티티에 값이 무조건 있어야 하나요?
0
52
1
JPQL 메소드와 락
0
55
1
Delivery @OneToOne
0
60
1
17강 4~5분대 테이블 값 조회가 안됩니다.
0
94
2
UnsupportedOperationException 발생
0
86
3
H2 Database 연결이 안됩니다.
0
95
2
연관관계 매핑 질문드립니다.
0
85
2
h2데이터베이스 실행오류
0
108
2
persistence.xml
0
108
2
양방향 연관관계에서 연관관계의 주인(mappedBy)을 왜 꼭 정해야 하나요?
0
80
1
영속성 컨텍스트
0
66
1
JPA 프록시
0
96
1
Native Query와 MyBatis
0
70
1
영속성 컨텍스트는 어떤 메모리에 저장되는건가요?
0
87
1
임베디드 타입 예시 코드 관련 질문
0
115
3
명시적 조인에서 별칭을 주면 왜 객체에 접근할 수 있나요
0
95
3
인텔리제이 패키지 커서 단축키 질문
0
108
2
혹시 현재는 ID 데이터 타입이 String이면 안되나요?
0
145
1





