일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 랜덤 포트
- 스프링 컨테이너
- 스프링 IoC 컨테이너
- Not Acceptable
- Java Reflection API
- entity
- Controller
- 406 NOT_ACCEPTABLE
- SpringBootTest
- jdbc template
- JPA
- 좋은 객체지향 설계 원칙
- restTemplate
- 기본 생성자
- 가을야구
- 스프링
- 통합 테스트
- 컴포넌트 스캔
- 빈 스코프
- jdbc
- 의존관계 자동 주입
- 405 METHOD_NOT_ALLOWED
- 스프링 데이터 JPA
- ResponseEntity
- RunWith
- 정적 컨텐츠
- 테스트 코드
- 키움
- testresttemplate
- 의존성 주입
- Today
- Total
코드네임 JY
[프로젝트] 테이블 설계 & 엔티티 세팅 본문
처음 연관관계를 생각할 때, 나는 엔티티부터 생각하고 테이블 설계로 넘어갔다. 하지만 생각하지 못한 부분이 너무나도 많았다..!
컬럼 안에서는 리스트 형태로 데이터를 가질 수 없지 않나! 자바로 먼저 코드 짤 생각부터 하니 데이터베이스 설계가 망가졌다. 🥲🥲
따라서 테이블을 먼저 설계한 후에, 엔티티를 세팅 하도록 하자! 앞으로도!
🏈 테이블 설계
현재 프로젝트에서 사용할 테이블은 총 4개이다.
✅ 회원 정보, USER
✅ 음악 플레이리스트, PLAYLIST
✅ 음악 그 잡채, MUSIC
✅ 아티스트 정보, ARTIST
이 친구들은 서로 연결지어 사용하려면, 테이블 간의 연관관계를 알아내야 한다! 서로 어떤 관계를 가져야할지 고민해보자!
MUSIC & ARTIST
하나의 ARTIST는 다수의 MUSIC을 가질 수 있다! 그래서 둘은 (MUSIC 입장) 다대일 관계 이다!
→ MUSIC (N : 1) ARTIST
MUSIC & PLAYLIST
이게 좀 생각할 부분이 많았다.. 생각해보면! 하나의 PLAYLIST는 다수의 MUSIC을 가질 수 있다!
그래서 둘은 (MUSIC 입장) 다대일 관계구나! 라고 생각해서 다음과 같이 테이블 관계를 그렸다.
그런데 PLAYLIST에서 MUSIC을 삭제하는 상황을 생각해보자.
예를 들어 playlist_id가 14번이라면, MUSIC 테이블 내에서 14 값을 가진 playlist_id를 지워야한다! 근데 이게 뭐 어때서?
뭐 어떻다니!! PLAYLIST 테이블에 DELETE 쿼리가 나가는 것이 아니라 MUSIC 테이블에 쿼리가 나가야 한다..!
반대 테이블에 쿼리가 나가야하는 문제 가 발생할 뿐더러, MUSIC 테이블 자체는 고유한 성격 을 가져야 한다.
예시로, 🍈 이나 🍎 뮤직에서도 음악 데이터 자체에 사용자의 플레이리스트 정보를 넣지는 않을 것 이다.. 😡😡
그렇다면 어떤 관계로 구현해야하지? 잠시 간과한 사실이 하나 있다. 하나의 MUSIC도 여러 PLAYLIST에 포함될 수 있다..!
하지만 다대다 관계는 직접 데이터베이스 상에서 풀어낼 수 없다. 중간 테이블을 놓고, 일대다 + 다대일 관계로 풀어야한다!
LINKED_TABLE 이라는 이름으로 중간 테이블을 하나 놓고, 둘의 다대다 관계를 일대다 + 다대일 관계 로 풀어내었다!
→ PLAYLIST (1 : N) LINKED_TABLE (N : 1) MUSIC
PLAYLIST & USER
하나의 USER는 다수의 PLAYLIST를 가질 수 있다! 그래서 둘은 (PLAYLIST 입장) 다대일 관계 이다!
→ PLAYLIST (N : 1) USER
모든 테이블 간의 관계를 정리했다! MySQL Workbench를 사용해서 그려본 ERD는 다음과 같다!
(참고로 ERD는 'Entity Relationship Diagram' 을 의미한다)
🥎 엔티티 세팅
모든 테이블의 연관관계를 매핑하고 ERD까지 완성했으니, 이제 엔티티로 옮길 차례이다!
위처럼 엔티티 간 관계를 그릴 수 있다! 데이터베이스 테이블을 먼저 설계하고, 그 다음에 엔티티를 생각하자! 🥴🥴
'백엔드 공부' 카테고리의 다른 글
[프로젝트] 넌 못 지나간다 (0) | 2023.02.20 |
---|---|
[프로젝트] 즉시 로딩과 지연 로딩 (0) | 2023.02.20 |
[프로젝트] 요구사항 분석 및 구현 단계 (0) | 2023.02.14 |
[스프링 JPA] 연관관계 매핑 (2) (0) | 2023.02.13 |
[스프링 JPA] 연관관계 매핑 (1) (0) | 2023.02.10 |