데이터베이스 설계 시에서 일반적인 상황에 대해 여쭤보고싶습니다!
377
작성한 질문수 18
안녕하세요 강사님!
강사님의 강의 영상을 보고 Spring Data JPA 를 학습했던 학생입니다.
다름이 아니라 데이터베이스 설계 시에 다음과 같은 상황에서는 어떤 방법이 일반적인지 실무의 관점에서 조언을 얻고자 합니다.
`USER`, `COURSE`, `ASSIGNMENT`, `ASSIGNMENT_SUBMIT` 이렇게 4개의 테이블이 있다고 가정할 때,
USER : 사용자 테이블
COURSE : 강의 테이블
ASSIGNMENT : 과제 테이블
ASSIGNMENT_SUBMIT : 학생이 제출한 과제 테이블
ASSIGNMENT_SUBMIT 테이블의 PK가 어떤 형태로 되어야 하는지 각각의 장단점에 대해 생각을 해보았습니다.
1. id 라는 칼럼을 만들어서 Auto_Increment 로 pk 를 관리한다.
- 장점
- findById 에서 숫자 인덱스를 이용한 조회를 하기 때문에 조회 속도가 빠르다.
- 단점
- 칼럼 하나가 늘어난다.
2. user_id 와 assignment_id 라는 두 개의 칼럼을 이용해서 pk로 관리한다.
- 장점
- id 칼럼이 사라진다.
- 단점
- jpa 에서 제공하는 기본 findById 가 사라진다.
- fk 를 결합하여 pk 를 만드는 레퍼런스를 찾지 못했다..
정도 있습니다. 만약 강사님이시라면 어떤 선택을 하실지 또한 각각 어떤 장단점이 더 있을지 알려주실 수 있으실까요?
답변 1
0
안녕하세요. 장원익님
복합키를 사용해도 findById를 사용할 수 있습니다.
질문하신 부분에 정답은 없지만 저는 JPA를 사용할 때 편의(복합키의 불편함) + 유연함 때문에 새로운 id를 생성하는 것을 선호합니다.
추가로 궁금한 내용은 다음을 참고해주세요.
- JPA 책 6.4.4 다대다: 새로운 기본 키 사용
- JPA 복합키는 JPA 책 7.3 복합 키와 식별 관계 매핑을 참고해주세요.
그리고 추가로 필요한 부분에 인덱스를 추가합니다.
감사합니다.
changeTeam 메서드 질문
0
34
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
87
1
existsByUserIdAndProjectId vs existsByUserAndProject 중 어떤 방식이 적절할까요?
0
126
3
MemberRepository 구현체
0
71
1
pdf 표현 질문드립니다.
0
77
1
로그가 남지 않는 문제.
0
98
1
테스트 라이브러리가 강의는 junit4가 맞나요??
0
78
2
pdf 파일과 차이점이 있는 것같은데 문제 없나요?
0
75
2
@PrePersist, @PreUpdate 호출 시점 질문드립니다.
0
102
2
Sort 인터페이스는 잘 사용 안하나요?
0
59
1
스캔대상 질문드립니다.
0
48
1
하이버네이트6에서의 최적화에 이은 질문
0
92
1
save() vs saveAndFlush DB 통신 횟수
0
58
1
순수 JPA 리포지토리 코드 수정부분
0
91
2
bulk연산 후 flush하는 이유를 모르겠어요
0
163
3
bulk insert 질문입니다.
0
191
2
교만했던 것 같아요.
0
152
1
RESTful 강의는 안하시는 건지 궁금합니다.
0
154
2
동적 테이블에 대한 질문
0
89
1
영속성 전이와 연관관계
0
141
2
강의 10:25 질문
0
78
1
단건 update 질문
0
104
2
엔티티 와 도메인의 경계
0
129
1
UsernameOnlyDto 타입 type mismatch 오류
0
123
1





