카테고리 없음

ERD 설계하기

leehyeon-dv 2025. 1. 24. 23:50

1. vs code에서 ERD Editor을 깔아서 실행할 예정이다 

 

2. {db이름}.vuerd.json 파일만든다 -> 이렇게 생성됨

 

3. (?는 단축키를 알려준다)

 

4. 빈 캔버스에 우클릭하면 이렇게 나온다

 

5. Alt + N, Alt + Enter누르면 

이렇게 나오는것을 볼 수 있고 

pk설정은 우클릭이나 Alt + k 누르면 설정할 수 있다 

 

 

 

실습 -----------------------------------------------

 

 

 

요구사항

  • 사용자 요구사항
    1. 카카오 소셜 로그인 구현
    2. 회원 탈퇴 기능 필요
    3. 이름, 닉네임, 전화번호 , 성별 필요
  • 책관련 요구사항
    1. 사용자가 책을 여러권 대여 가능
    2. 책은 하나의 카테고리가 있음
    3. 책은 제목, 설명에 대한 정보 필요
    4. 책 소개 페이지에 해시태크가 붙을 수 있고 책 한권에 해시태그가 여러개, 해시태그 하나가 여러 책에 붙을 수 있다
    5. 사용자가 책 설명 페이지에서 책에 좋아요를 누를 수 있음
    6. 책 카테고리 별로 현재 몇 개의 책이 있는지 집계 필요
  • 알림 관련 요구사항
    1. 알림은 공지관련 알림, 책 반납 시간 임박 알림, 마케팅 알림

 

 

🔥간단히 구현부터 

 

1.

  • 테이블 이름, 칼럼 이름 = 소문자, 단어구분은 대소문자가 아니라 _ 로 구분
  • 기본키를 위해 각 엔티티 정보중 유일한 값을 기본키로 설정하기보다는 index를 따로 두는것이 편하다 , 그리고 각 index를 위한 id를 book_id가 아니라 id로 둔다
  • 기본 키 타입은 int가 아닌 서비스 확장을 고려해 bigint로 한다

 

따라서 이렇게 구현할 수 있다 

 

2.

타입을 설계 한다 → 피엠에게 물어봐야함 ( 일단 물어봤다고 가정하고 설계한다)

text는 string처럼 길이 제한이 없는 타입 ( 글자 수 제한 줘도 됨)

 

3.

created_at, updated_at을 테이블마다 추가해준다(datetime(6) = 밀리초 소수점 6자리까지)

  • 밀리초까지 구분하는 이유
    • 나중에 기능 구현을 염두한 설계임 (최신순 정렬)
    • 초 단위 까지 저장하면 created_at이 초 단위까지 같은 상황이 일어나서 최신순 정렬이 되지 않기 때문에 밀리초 소수점까지 구분한다(MySQL기준 6자리가 최대)

 

4. member 테이블에 status, inactive_date를 두는 것이 좋음

 

💡왜 저렇게 할까?

- 기능 구현 시 회원탈퇴, 게시글 삭제등 HTTP 메서드 중 delete로 바로 삭제해버리는 방법도 있다 (Hard Delete)

   → 지양함

-일반 비활성 상태로 두고 , 일정기간동안 비활성인 경우 자동 삭제되도록 설계

※ status를 active, inactive 등 enum으로 관리하기 위해 varchar(15)로 둔다 , 얼마동안 비활성화인지 알기위해 inactive_date를 둔다

 

🤔어떻게 자동으로 지울까?

batch = 정해진 시간에 자동으로 실행되는 프로세스 (예 : 매일 새벽2시에 member테이블을 검사해 inactive된 이후 7일이 지난 경우 삭제하도록 한다) → soft delete라고 함 

soft delete는 당연히 HTTP Method중 patch이다 

 

🤔 연관관계에 대한 고민

MySQL은 RDB 기반이고 RDB에서는 외래키로 연관관계를 표시한다 

사용자가 책을 대여할때 연관관계는 어떻게 해야할까?

 

N:M관계일때는 가운데에 매핑 테이블을 따로 두어야한다 

가운데 매핑테이블은 양쪽의 기본키를 외래 키로 가지고 각각 1:N관계를 가진다

 

 

🤔책과 책 카테고리는 어떻게 매핑할까 

   - 카테고리 하나 당 여러 종류의 책의 관계 → 1 : N

   - 책 한 종류에 여러 카테고리  → N : M관계이므로 가운데에 매핑 테이블 둬야한다 

   - 해시태그 : 여러개가 한책에 책에 여러 해시태그

   - 좋아요 : 사용자 여러명이 좋아요, 한 사용자가 여러 책에 좋아요

 

 

🤔알림은 어떻게 설계할까?

- 공지사항에 대한 알림은 알림 터치 시 해당 공지 사항으로 이동이 되고,

마케팅 알림의 경우 터치시 해당 마케팅으로 이동한다

 

1. 슈퍼 타입과 서브타입의 구성

 

2. 하나의 테이블에 두고 dtype으로 구분

 

3. 그냥 테이블 다 나누기