개발자로 후회없는 삶 살기

DB 설계 PART.카카오톡, 이클래스, 교보문고 ERD 설계 본문

[백엔드]/[DB | 학습기록]

DB 설계 PART.카카오톡, 이클래스, 교보문고 ERD 설계

몽이장쥰 2023. 6. 8. 20:57

서론

※ 이 포스트는 다음 강의의 학습이 목표임을 밝힙니다.

https://www.youtube.com/playlist?list=PL9hiYwOHVUQduJN7Pf_kOR8htpJU7K1H8 

 

2020 데이터베이스

 

www.youtube.com

 

본론

다양한 예제로 ERD를 활용해봅니다.

 

- 카카오톡 대화방

이번에는 카카오톡 대화방 ERD를 만들어보겠습니다. 역시 요구사항에 대해 카테고리를 작성하고 그 다음에 상세 요건을 작성하는 방향으로 진행합니다. 다양한 카테고리 중에 대화방에만 집중에서 만들어보겠습니다.

 

-> 카테고리

1. 대화방

 

-> 엔터티

1. 회원
2. 대화방

 

카테고리를 보고 큰 틀이 될 엔터티를 설계합니다. 회원 테이블을 중심으로 대화방에 필요한 엔터티들 중에서 이미지 하단에 보이는 친구 목록, 채팅만 생각합니다.

 

-> 관계

회원과 대화방은 M:N입니다. 누구를 먼저 클릭할 지에 따라서 대화방 입장에서는 해당 대화방에 참여한 회원들 목록이고 회원들 입장에서 보면 자신들이 참여한 대화방 목록으로 대등하여 순서가 상관이 없습니다.

 

=> 세부 테이블 및 세부 속성 작성

1. 대화 목록

특정 대화방에 들어가면 대화 목록이 나오는데 대화 목록은 어떻게 설계를 해야할까요? ✅

 

대화는 누가, 무슨 말을, 몇시에 했나를 담고 있습니다. 한 대화방에 대화가 여러개로 모든 회원과 모든 대화방의 리스트를 담은 맵핑 테이블에 대화를 연결합니다.

 

2. 친구 목록

회원들끼리의 친구는 M:N 관계입니다. 그런데 친구 테이블을 만드는 것이 아니고 회원들끼리 친구인 상태를 만듭니다.

 

 

- 이클래스 ERD

강의 개설과 수강 신청하는 테이블을 만들어봅니다.

 

-> 카테고리

1. 강의개설
2. 수강신청
3. 학습
4. 출석

 

-> 엔터티

1. 학생
2. 과목
3. 학습차시
4. 학습주차(학습)

 

카테고리를 보고 큰 틀이 될 엔터티를 설계합니다.

 

-> 관계

학기와 과목은 M:N이지만 단순 M:N이 아닌 과목 + 학기 + 개설 3개의 테이블 관계가 되고 교수는 연도에 따라 바뀔 수 있기에 과목 테이블에 있는 것이 아닌 "해당 학기에 해당 과목에는 교수가 누구였다."를 위해 개설 테이블에 있어야 합니다. 중간 테이블에는 판매처럼 맵핑 테이블 리스트에 같이 있을 정보를 넣습니다.

 

학습과 학습 차시는 1:N 포함관계입니다.

 

=> 세부 테이블 및 세부 속성 작성

 

1. 강의실 테이블

이클래스는 과목마다 DB1반, DB2반처럼 여러개의 강의실이 개설된다고 가정합니다. 과목과 강의실의 관계는 한 과목에 여러개의 강의실이 개설됩니다. 따라서 개설과목과 1:N인 개설과목이 부모입니다. 지금 맵핑 테이블과 강의실 테이블을 연결해서 의아할 수 있는데 개설과목은 매핑테이블이 아닙니다. 맵핑 테이블도 연결할 수 있습니다. 맵핑테이블에 얽매이지 말고 설계하면 됩니다.

 

2. 학생과 강의실

이클래스는 학생이 수강신청을 할 때 개설과목이나 과목이 아닌 강의실에 한다고 가정합니다. 이 둘은 M:N의 관계를 가지고 어떤 학생이 어떤 강의실에 수강신청을 했는지 알 수 있는 매핑 테이블(목록)을 가집니다.

 

이렇게 하여 수강신청 ERD를 완료합니다.

 

-> 학습과 출석

학습 주차가 학습이고 강의실이 DB1반, 2반, 3반 이런 것입니다. 학습이 1주차, 2주차, 3주차가 쭉 있고 각 주차별로 수업 기간이 있고 학습차시(교시)가 있고 차시별로 동영상이 있습니다.

 

3. 학습 주차(학습)

 

학습은 강의실에 등록이 됩니다. 그냥 이 학습이 어떤 강의에 속한 지 알기 위한 것이라고 보면 됩니다. 학습이 강의실에 포함되는 관계인 강의실이 1, 학습이 N인 관계가 됩니다. 이름이 애매해서 헷갈리지만 단순히 생각하면 DB 1(강의실) 수업을 학습(학습 주차)하는 것입니다. 이클래스 정책에 맞게 이름을 맞췄습니다.

 

학습 주차마다 학습 차시가 있고 학습 차시는 주차에 소속된 것이므로 학습주차가 1인 1:N 관계입니다. 

 

4. 출석

출석은 학생과 학습차시의 관계입니다. 수업을 듣는 것은 차시를 이수하는 것이기 때문입니다. 이 둘은 소속관계가 없는 M:N 관계로 어떤 학생이 어떤 학습을 들었다의 매핑 관계입니다. 학생이 학습을 하는 출석 관계라고 볼 수 있습니다.

 

출석에는 학습 현황 테이블이 있습니다. 현황과 출석의 관계는 출석은 여러개의 현황이 있는데 현황은 한개의 출석만 있으므로 현황이 출석에 소속되는 1:N 관계입니다. 학습 현황이 학번과 학습차시 번호를 조합하여 pk를 가지는데 이는 유일성을 만족할 수 없어서 시작시간을 pk로 합니다.

 

-> 최종 ERD

 

 

- 교보문고 시스템
-> 카테고리

1. 주문
서점의 핵심은 회원이 있고 책이 있고 주문하는 것입니다.

 

-> 엔터티

1. 회원
2. 책
3. 주문

 

카테고리를 보고 큰 틀이 될 엔터티를 설계합니다.

 

-> 관계

회원이 책을 주문하는 관계입니다.

 

실제 주문 내역을 보면 주문번호이 있고 한 주문에 책이 여러권 있을 수 있습니다.

 

-> 속성

엔터티에 들어갈 속성들을 적습니다. 책에 제목, 부제가 있습니다.

 

저자는 링크이므로 패스하고, 옮김, 출판사, 출간일, 리뷰점수, 정가, 할인가 등이 있습니다.

 

실제 주문 내역을 보면 금액, 수량, 주문 상태가 있습니다.

 

따라서 책에 적었던 판매가는 책이 아닌 주문_책에 있는 것이 맞고 역시 매핑 테이블 관점에서 보면 어떤 회원이 어떤 책을 주문했는지 나와있는 리스트에 금액, 수량, 주문 상태가 있는게 당연합니다.

 

=> 세부 테이블 및 세부 속성 작성
1. 저자 테이블

 

위 이미지를 보면 책에 저자는 링크로 저자가 쓴 책들이 나오므로 저자를 별도의 테이블로 만들고 부모가 저자, 책이 자식의 관계를 가집니다.

 

2. 장바구니 테이블

장바구니는 회원과 책을 매핑하는 것일 뿐입니다. 거기에 수량과 합계만 더 있는 것입니다. 회원과 책을 M:N으로 연결한게 장바구니고 수량과 합계만 더해주면 됩니다.

 

3. 보관함

보관함에는 책만 있고 수량이 없는 관심 품목의 개념입니다.

 

4. 배송지

배송지는 회원에 속하는 1:N 관계입니다.

Comments