본문 바로가기
Side Projects/프로젝트 사이

4. DB 구조 설계 - ERD

by devraphy 2022. 6. 29.

0. 개요

- 프론트 개발을 어느정도 완료하고 이제 백엔드 개발을 준비하고 있다.

- 백엔드 개발의 시작을 ERD 제작으로 선정하여 ERD를 그려보았다.

- ERD를 작성해보니 백엔드를 개발하면서 풀어야하는 문제점을 몇가지 발견하였다. 

 

 

1. Entity 소개

- 프로젝트 SAI는 다음과 같은 Entity로 구성된다.

 

 

a) User Table

- User는 SAI 서비스에 가입한 회원의 정보를 관리하는 테이블이다.

- 회원 가입 시 작성한 정보가 User Table에 입력된다. 

- User Table의 구성은 다음과 같다.

 

  • id(PK) - 자동 증감을 사용한다. 
  • email - 로그인 시 사용할 이메일 주소 / 필수 값 / 유효성 검증 필요
  • password - 로그인 시 사용할 비밀번호 / 필수 값 / 유효성 검증 필요
  • userName - 가입하는 회원의 이름이다 / 필수 값 / 유효성 검증 필요

 

b) Friend Table

- Friend는 모든 회원의 친구 정보를 관리하는 테이블이다.

- 회원이 친구를 등록할 때 작성한 정보가 Friend Table에 입력된다.

- 각 회원은 다수의 친구를 보유할 수 있다.

- 각 친구는 반드시 한명의 회원을 할당 받는다.

- Friend Table의 구성은 다음과 같다.

 

  • id(PK) - 자동 증감을 사용한다.
  • owner(FK) - 친구 정보에 할당된 회원 정보 / User Table의 PK를 할당 / 필수 값
  • name - 친구의 이름 / 필수 값
  • relationship - 친구와의 관계 / Enum이 사용될 예정 / 필수 값
  • status - 현재 관계의 정도 / Enum이 사용될 예정 / 필수 값
  • birthDate - 친구의 생일 / 선택 값
  • lastContact - 마지막 연락일 / 선택 값
  • memo - 기타 정보 / 선택 값

 

c) Event Table 

- Event는 모든 회원의 이벤트 정보를 관리하는 테이블이다.

- 회원이 이벤트를 등록할 때 작성한 정보가 Event Table에 입력된다.

- 각 이벤트는 다수의 친구 정보를 포함할 수 있다.

- 각 친구는 다수의 이벤트에 포함될 수 있다.

- Event Table의 구성은 다음과 같다. 

 

  • id(PK) - 자동 증감을 사용한다.
  • participants(FK) - 이벤트에 포함된 친구 정보 / 필수 값
  • owner(FK) - 이벤트를 소유한 회원 정보 / 필수 값
  • date - 이벤트 날짜 / 필수 값
  • purpose - 이벤트의 목적 / 필수 값
  • eventName - 이벤트 이름 / 선택 값 / default value로 참가한 친구 이름을 입력
  • evaluation - 이벤트 평가 / Enum이 사용될 예정 / 필수 값

 

 

2. 관계

- 프로젝트 SAI는 다음과 같은 관계를 가진다.

 

a) User to Friend

- 하나의 회원은 다수의 친구를 보유할 수 있으므로 One To Many 관계를 형성한다.

- 하나의 친구는 반드시 하나의 소유자(회원)를 가지므로 One To One 관계를 형성한다. 

- Friend를 이용하여 User를 검색하는 경우는 존재하지 않는다.

- 그러므로 User to Friend 단방향 연결을 구현한다. 

 

b) User to Event 

- 하나의 회원은 다수의 이벤트를 보유할 수 있으므로 One To Many 관계를 형성한다.

- 하나의 이벤트는 반드시 하나의 소유자(회원)을 가지므로 One To One 관계를 형성한다.

- Evnet를 이용하여 User를 검색하는 경우는 존재하지 않는다.

- 그러므로 User to Event 단방향 연결을 구현한다.

 

c) Event to Friend / Friend to Event

- 하나의 이벤트는 다수의 친구를 보유할 수 있으므로 One To Many 관계를 형성한다.

- 하나의 친구는 다수의 이벤트에 포함될 수 있으므로 One To Many 관계를 형성한다.

- Friend를 이용하여 Event를 검색하는 경우가 존재한다. 

- 그러므로 User to Event와 Event to user 양방향 연결을 구현한다. 

- 이 양방향 구현에서 문제가 발생한다. Many To Many 관계가 형성되기 때문이다. 

- 이 부분은 Join Table을 이용하여 해결할 예정이다.

 

 

댓글