코드네임 JY

[프로젝트] 테이블 설계 & 엔티티 세팅 본문

백엔드 공부

[프로젝트] 테이블 설계 & 엔티티 세팅

영재임재영 2023. 2. 14. 14:48

처음 연관관계를 생각할 때, 나는 엔티티부터 생각하고 테이블 설계로 넘어갔다. 하지만 생각하지 못한 부분이 너무나도 많았다..!

컬럼 안에서는 리스트 형태로 데이터를 가질 수 없지 않나! 자바로 먼저 코드 짤 생각부터 하니 데이터베이스 설계가 망가졌다. 🥲🥲

따라서  테이블을 먼저 설계한 후에, 엔티티를 세팅 하도록 하자! 앞으로도!

🏈 테이블 설계

현재 프로젝트에서 사용할 테이블은 총 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까지 완성했으니, 이제 엔티티로 옮길 차례이다!

 

위처럼 엔티티 간 관계를 그릴 수 있다! 데이터베이스 테이블을 먼저 설계하고, 그 다음에 엔티티를 생각하자! 🥴🥴

Comments