티스토리 뷰

UMC - Node.js

1. 데이터베이스 설계

염두리안 2025. 3. 17. 14:24
728x90
반응형

ERD는 언제 설계하는 것이 좋을까? 프로젝트 시작과 동시에 설계하는 것이 좋음 | 모두가 공통된 데이터베이스에 대해 인지한 후 작업하는 것이 좋음

데이터베이스 설계

이름 설정

  • 테이블&컬럼 이름은 모두 소문자 | 단어구분은 대소문자가 아닌 밑줄이 좋음
  • 각 엔티티 정보 중 유일한 값을 기본키로 설정하기 보다 인덱스를 따로 두는 것이 편하다.
    • book_id, member_id → id
  • 기본 키 타입은 int가 아닌, 추후 서비스 확장을 고려해 bigint로,,,
  • create_at, updated_at에서 datatime(6)은 밀리초 소수점 6자리까지 구분한다는 의미 (MySQL은 6자리가 최대)

member(회원) 테이블의 경우, status와 inactive_date를 두는 것이 좋음

  • status : 활성/비활성 상태를 나타냄 | inactive_date : 얼마 동안 비활성된 상태인지 알아내기 위함
  • Hard Delete? 바로 삭제해 버리는 것... 계정 삭제 신청 후 바로 삭제되면 돌아오고 싶어도 다시 못 돌아온다,,,!!
    => 따라서, 일단 비활성화 상태로 두고 일정 기간동안 비활성인 경우 자동 삭제 되도록 설계하는 것이 좋음
  • 그렇다면, 어떻게 자동으로 지울까?
    • batch? 정해진 시간에 자동으로 실행되는 프로세스... inactive된 이후 일주일이 지난 경우 삭제할 수 있도록 함 ~> soft delete

연계관계

  • N:M 관계의 경우, 가운데에 매핑 테이블을 따로 둬야 함
  • 해시태그의 경우, 여러 개가 한 책에 붙고, 책에 여러 해시태그가 붙음 → N:M
  • 사용자가 책에 누르는 좋아요의 경우, 한 종류의 책에 여러 명의 사용자가 좋아요를 누르고, 한 사용자가 여러 책에 좋아요를 누름 → N:M

알림의 경우, 공지사항에 대한 알림은 공지사항으로, 마케팅 알림의 경우 해당 마케팅 페이지로 이동할 때 설계

  • 슈퍼타입, 서브타입으로 나눠 구성 (alarm -> noitce, marketing)
  • 하나의 테이블을 두고 dtype으로 구분
  • 그냥 다 따로 구성(notice_alarm, marketing_alarm)

미션 기록

1. 테이블 정의

  • user, user_mission, mission, alram 테이블 정의

 

2. 관계 정의

  • 한 유저는 여러 개의 알림을 받을 수 있다. (1:N)
  • 한 유저는 여러 개의 미션을 수행 수 있다. (1:N)
  • 하나의 미션은 여러 사람이 수행할 수 있다. (1:N)

 

3. 요구사항 반영한 테이블 추가

  • 각 지역 별로 가게들이 있으며 가게를 방문하는 미션을 해결하며 포인트를 모으는 서비스
  • 모든 지역마다 10개의 미션 클리어시 1000 point 부여로 고정
  • location, store, user_location_mission 테이블 추가

 

4. 관계 정의

  • 한 유저는 여러 개 지역에서 미션을 수행할 수 있다. (1:N)
  • 한 지역에는 여러 개의 가게가 존재할 수 있다. (1:N)
  • 한 지역에 대해 여러 사용자가 진행상황을 가질 수 있다. (1:N)

 

5. 리뷰 테이블 추가

 

6. 음식 카테고리, 유저 선호 테이블 테이블 추가

 

7. 완성! (맞는지는 모르거따^^;)

728x90
반응형

'UMC - Node.js' 카테고리의 다른 글

ES6와 프로젝트 파일 구조의 이해  (0) 2025.04.10
3. API URL 설계  (0) 2025.04.02
2. 실전 SQL  (0) 2025.03.26
최근에 올라온 글
최근에 달린 댓글
«   2025/04   »
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
Total
Today
Yesterday
반응형