1️⃣ 노션에 정리했던 각 테이블과 설명
지난 팀 프로젝트를 통해 DB 설계의 중요성을 몸소 체감했기 때문에 이번에는 정말로 철저하게 DB 설계를 진행하고 싶었습니다.
먼저 노션을 활용하여 각 테이블과 필요한 컬럼을 보기 좋게 정리하는 과정을 가졌습니다. 노션은 수정하기도 편리해서 여러 번 수정하며 고민해보는 시간을 많이 가졌습니다!
2️⃣ 2차 설계
노션에 정리해둔 문서와 지난 번 게시글에 올렸었던 1차 설계본을 기반으로 이번엔 MySQL을 사용해 2차 설계를 했습니다.
수정, 보완된 점이 몇 개 있는데요,
- 각 테이블의 PK 데이터타입을 INT & AI로 수정
AI는 Auto Increment의 줄임말으로서 자동 증가된다는 뜻입니다. 새로운 레코드가 추가될 때마다 자동으로 증가하여 고유한 값이 부여되므로 편리하고, 중복이나 오류를 방지할 수 있습니다. - puppy테이블과 gallery테이블 연결을 해제하고 gallery테이블-note테이블을 연결
갤러리 테이블은 별도의 내용없이 사진만 올리려고 합니다. 말 그대로 날짜별로 사진들만 쭉 올리게 되어서 사용자가 사진을 보관할 수 있는 곳입니다. - store테이블에 userId 칼럼을 추가
3️⃣ 3차 설계
- user테이블과 board테이블을 느슨한 결합으로 수정 ⇒ board테이블에 userId 컬럼을 추가
- user테이블과 comment테이블을 느슨한 결합으로 수정 ⇒ comment테이블에 userId 컬럼을 추가
- user테이블과 likeList테이블을 느슨한 결합으로 수정 ⇒ likeList테이블에 userId 컬럼을 추가
게시글과 댓글을 작성한 회원이 회원탈퇴를 했을 때, 해당 글을 유지할 것인가, 삭제처리 할 것인가도 고민해봐야 할 부분 이었습니다.
이렇게 최종적으로 ERD 를 설계해봤는데요. 확장성과 삭제, 수정에 대한 종속성 등 어떻게 서비스를 제공할 것인지에 대해 결정해야할 부분이 이렇게 많을 줄 몰랐습니다. 단순히 데이터를 잘 저장하기만 하면 되는 줄 알았는데, 데이터 저장 방식을 결정하는 순간부터 서비스의 방향이 결정됨을 깨달을 수 있었던 좋은 경험이었습니다....(ERD 설계에 이렇게 오래 걸릴 줄은 몰랐다..)
user
비밀번호, 생년월일, 주소 등 기본적인 항목을 넣었고 회원가입 시 이메일 인증을 하기 위한 이메일 항목도 넣었습니다.
사용자는 여러 마리의 반려견을 등록할 수 있으므로 puppy 테이블과 일대다 관계를 맺습니다.
puppy
user테이블과 일대다 다대일 관계를 맺었으므로 userId를 FK로 갖게 되고, 유치원을 뜻하는 store테이블과도 다대일 관계를 맺게 되어 storeId FK도 갖게 됩니다.
그리고 각 강아지마다 알림장을 갖기 때문에 note 테이블과 일대다 관계를 맺습니다.
note
note데이터가 저장될 때 그 날의 여러가지 사진도 저장될 것이므로 gallery테이블과 일대다 관계를 맺습니다.
board
하나의 게시글은 여러 개의 댓글을 가질 수 있으므로 comment테이블과 일대다 관계입니다.
하나의 게시글은 여러 개의 좋아요를 가질 수 있으므로 likeList테이블과 일대다 관계입니다.
DB는 진짜진짜 어렵고 한 번 들여다보면 고민이 많아집니다.
이게 맞는건지 저게 맞는건지...간단한 DB임에도 불구하고 생각하는 시간을 정말 많이 썼어요. 완벽하지 않아 프로젝트를 진행하면서도 꽤 많은 수정할 부분이 생기지 않을까 싶습니다.
하지만 헤맨 만큼 내 땅!!!!! 👍
'Project 댕린이집' 카테고리의 다른 글
VSCODE에서 node.js를 통해 React를 불러오기 (1) | 2023.12.28 |
---|---|
CORS (0) | 2023.12.27 |
Repository & Service 초기 작성 (0) | 2023.12.22 |
Entity 수정 (0) | 2023.12.20 |
Entity 작성 (1) | 2023.12.19 |