닉네임, 이메일, 비밀번호, 프로필사진, 소개글, 팔로잉 대상
게시글 작성자, 제목, 내용, 작성 날짜, 해시태그, 좋아요 수, 좋아요 누른 사람
댓글 작성자, 댓글 내용, 작성 날짜, 어떤 게시글에 달렸는지
사용자(users)
닉네임, 이메일, 비밀번호, 프로필사진, 소개글, 팔로잉 대상
게시글(posts)
게시글 작성자, 제목, 내용, 작성 날짜, 해시태그, 좋아요 수
댓글(comments)
댓글 작성자, 댓글 내용, 작성 날짜
먼저, 위에서 분류한대로 테이블을 생성한다. mock 데이터도 넣어본다.
users
| id | 닉네임 | 이메일 | 비밀번호 | 프로필 사진 | 소개글 | 팔로잉 대상 |
|---|---|---|---|---|---|---|
| 1 | 김홍도 | k@k.com | kkkkk | http... | 안녕하세요 | 2 |
| 2 | 이지은 | n@n.com | nnnnn | http... | 안녕하세요 | 1 |
| 3 | 권지용 | h@h.com | hhhhh | http... | 안녕하세요 | 1, 2 |
posts
| id | 작성자 | 제목 | 내용 | 작성 날짜 | 해시태그 | 좋아요 수 | 좋아요 누른 사람 |
|---|---|---|---|---|---|---|---|
| 1 | 김홍도 | 취업에 관하여 | 취업.... | 2024-12-01 00:00:00 | 개발자, 취업 | 1 | 권지용 |
| 2 | 이지은 | 개발자 역량 강화 | 개발자.... | 2024-12-01 00:00:00 | 개발자, 스펙 | 2 | 김홍도, 권지용 |
comments
| id | 작성자 | 내용 | 작성 날짜 | 게시글 |
|---|---|---|---|---|
| 1 | 김홍도 | 좋은 글이네요 | 2024-12-01 12:00:00 | 개발자 역량 강화 |
| 2 | 권지용 | 잘 봤습니다 | 2024-12-01 12:00:00 | 취업에 관하여 |
| 2 | 권지용 | 잘 봤습니다 | 2024-12-01 13:00:00 | 개발자 역량 강화 |
위에 생성된 테이블에서 중복 데이터를 찾아 테이블을 분리 및 생성한다.
내 임의로 진행한 과정이며 이유를 밑에 적어놓았다.
이 과정으로 수정되거나 생성된 테이블은 아래와 같다.
users
| id | 닉네임 | 이메일 | 비밀번호 | 프로필 사진 | 소개글 |
|---|---|---|---|---|---|
| 1 | 김홍도 | k@k.com | kkkkk | http... | 안녕하세요 |
| 2 | 이지은 | n@n.com | nnnnn | http... | 안녕하세요 |
| 3 | 권지용 | h@h.com | hhhhh | http... | 안녕하세요 |
follows
| id | 팔로워 id (FK) | 팔로잉 대상 id (FK) |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
| 4 | 3 | 2 |
posts
| id | 작성자 id (FK) | 제목 | 소제목 | 내용 | 작성 날짜 |
|---|---|---|---|---|---|
| 1 | 1 | 취업에 관하여 | 소제목 | 취업.... | 2024-12-01 00:00:00 |
| 2 | 2 | 개발자 역량 강화 | 소제목 | 개발자.... | 2024-12-01 00:00:00 |
hashtags
| id | 해시태그명 |
|---|---|
| 1 | 개발자 |
| 2 | 취업 |
| 3 | 스펙 |
posts_hashtags
| id | 해시태그 id (FK) | 게시글 id (FK) |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 1 | 2 |
| 4 | 3 | 2 |
likes
| id | 게시글 id (FK) | 사용자 id (FK) |
|---|---|---|
| 1 | 1 | 3 |
| 2 | 2 | 1 |
| 3 | 2 | 3 |
comments
| id | 작성자 id (FK) | 내용 | 작성 날짜 | 게시글 id (FK) |
|---|---|---|---|---|
| 1 | 1 | 좋은 글이네요 | 2024-12-01 12:00:00 | 2 |
| 2 | 3 | 잘 봤습니다 | 2024-12-01 12:00:00 | 1 |
| 3 | 3 | 잘 봤습니다 | 2024-12-01 13:00:00 | 2 |
follows
hashtags
likes
posts
comments
강사님이 설계한 최종 버전 DB이다.
위에서 내가 진행한 과정과 강사님이 진행한 과정을 비교하며 내가 다르게 설계한 이유도 함께 기재했다.
users
| id | 닉네임 | 이메일 | 비밀번호 | 프로필 사진 | 소개글 |
|---|---|---|---|---|---|
| 1 | 김홍도 | k@k.com | kkkkk | http... | 안녕하세요 |
| 2 | 이지은 | n@n.com | nnnnn | http... | 안녕하세요 |
| 3 | 권지용 | h@h.com | hhhhh | http... | 안녕하세요 |
posts
| id | 작성자 id (FK) | 제목 | 소제목 | 내용 | 작성 날짜 |
|---|---|---|---|---|---|
| 1 | 1 | 취업에 관하여 | 소제목 | 취업.... | 2024-12-01 00:00:00 |
| 2 | 2 | 개발자 역량 강화 | 소제목 | 개발자.... | 2024-12-01 00:00:00 |
hashtags
| id | 해시태그명 |
|---|---|
| 1 | 개발자 |
| 2 | 취업 |
| 3 | 스펙 |
posts_hashtags
| id | 해시태그 id (FK) | 게시글 id (FK) |
|---|---|---|
| 1 | 1 | 1 |
| 2 | 2 | 1 |
| 3 | 1 | 2 |
| 4 | 3 | 2 |
follows
| id | 팔로워 id (FK) | 팔로잉 대상 id (FK) |
|---|---|---|
| 1 | 1 | 2 |
| 2 | 2 | 1 |
| 3 | 3 | 1 |
| 4 | 3 | 2 |
likes
| id | 게시글 id (FK) | 사용자 id (FK) |
|---|---|---|
| 1 | 1 | 3 |
| 2 | 2 | 1 |
| 3 | 2 | 3 |
comments
| id | 작성자 id (FK) | 내용 | 작성 날짜 | 게시글 id (FK) |
|---|---|---|---|---|
| 1 | 1 | 좋은 글이네요 | 2024-12-01 12:00:00 | 2 |
| 2 | 3 | 잘 봤습니다 | 2024-12-01 12:00:00 | 1 |
| 3 | 3 | 잘 봤습니다 | 2024-12-01 13:00:00 | 2 |
2번의 과정과 같다.
다만, 웹페이지 UI에 Popular Tags를 나타낸 부분이 있었는데 이를 표현하려면 가장 많이 사용된 상위 몇 개의 해시태그를 추릴 수 있어야 한다. 이 '해시태그 사용 횟수' 데이터를 저장할 데이터로 파악하지 못했다.
하지만 사용된 해시태그의 갯수를 컬럼으로 표현하는 것은 posts_hashtags 테이블에서 데이터가 삽입 또는 삭제될 경우 데이터가 바뀌는 통계 데이터이기 때문에 컬럼으로 넣지 않고 쿼리를 이용해 구한다.
글로 표현된 요구사항만 보다가 UI로 만들어진 모습을 직접 보고 DB 설계를 해봤는데, 글로 데이터를 표현해주지 않으니 내가 하나라도 놓치면 안되서 오히려 좀 더 꼼꼼히 봐야 한다는 생각이 들었다. 위의 Popular Tags 부분을 놓쳐보니 피부로 직접 느끼기도 했다.
그래도 정답에 가깝게 설계를 마친 것 같아 뿌듯하다.
** 요구사항 UI의 경우 강의 자료를 그대로 가져와야해서 생략했습니다.
이 게시글은 박재성님의 비전공자도 이해할 수 있는 DB 설계 입문/실전 강의를 토대로 작성되었습니다.
https://www.inflearn.com/course/%EB%B9%84%EC%A0%84%EA%B3%B5%EC%9E%90-db-%EC%84%A4%EA%B3%84-%EC%9E%85%EB%AC%B8/dashboard