DB(ERD) 설계

최다안·2022년 12월 20일
0

서버

목록 보기
5/8
post-thumbnail

📖 목차

  1. 프로젝트 주제

  2. DB 설계
    - 기획서
    - 요구사항 분석
    - 개체와 속성 추출
    - 개체 간의 관계 추출
    - ERD 작성

  3. ERD 설계
    • ERD 작성
    • ERD 작성 시 주의사항

📌 플젝 주제

중고거래 서비스 앱 당근마켓과 번개장터

📌 DB 설계

1) 기획서

이번 프로젝트에서는 당근마켓과 번개장터를 클론 코딩해보는 것이 주제였기 때문에, 당근마켓, 번개장터의 앱 화면(UI)을 기획서라고 가정하고 진행했다.
예) 당근마켓 홈 화면

예) 번개장터 홈 화면

2) 요구사항(기능) 분석

기획서를 보고 기능 및 요구사항을 분석

당근마켓 요구사항

  • 회원 정보에는 닉네임, 이메일, 전화번호, 동네, 매너온도, 재거래희망률, 응답률, 가입일이 있다
  • 회원은 내 동네 설정으로 최대 2개의 동네를 인증하여 설정할 수 있고 대표 동네를 선택하고 근처 동네를 설정할 수 있다.
  • 회원이 자신의 중고 상품을 판매할 수 있다
  • 회원이 원하는 중고 상품을 구매할 수 있다
  • 회원이 원하는 중고 상품을 찾아볼 수 있다
  • 회원이 중고 상품에 관심을 표시할 수 있다
  • 회원이 채팅을 통해 거래를 할 수 있다
  • 회원은 거래 후 서로 상대방에 대한 매너 칭찬을 남길 수 있다
  • 회원은 서로 거래에 대한 후기를 남길 수 있다
  • 판매하고 싶은 중고 상품을 등록할 때, 사진, 제목, 카테고리, 가격, 무료나눔 여부, 가격 제안받기 여부, 세부내용을 작성한다.
  • 중고 상품 등록 시 제목, 카테고리, 내용은 필수이다.
  • 중고 상품 등록 시 보여줄 동네를 설정할 수 있다(선택사항이며 기본 값 설정되어 있음)
  • 등록한 중고 상품의 판매 상황을 관리할 수 있다(판매중, 예약중, 거래완료)
  • 홈 화면에서는 내 동네 설정에 따라 해당 동네의 중고 상품들을 보여준다
  • 홈 화면에서는 하나의 중고 상품에 대해 대표 사진, 제목, 판매자 동네, 게시일, 가격, 채팅 수, 관심 수을 보여준다.

번개장터 요구사항

  • 회원 로그인 / 회원가입할 수 있습니다.
  • 회원은 상점명을 수정할 수 있습니다.
  • 회원은 소개글을 수정할 수 있습니다.
  • 회원은 상품 등록할 수 있습니다.
  • 회원은 등록한 상품을 수정하여 관리할 수 있습니다.
  • 회원은 관심있는 상품을 찜 할 수 있습니다.
  • 회원 팔로잉을 할 수 있습니다.
  • 회원은 상품을 구매할 수 있습니다.
  • 회원은 다른 회원과 채팅을 할 수 있습니다.
  • 특정 회원에 관련된 정보를 볼 수 있습니다.
  • 회원은 당일에 등록된 추천 상품을 볼 수 있습니다.
  • 회원은 카테고리 별로 상품을 볼 수 있습니다.
  • 회원은 최신순 / 인기순 / 저가순 / 고가순으로 상품을 볼 수 있습니다.

3) 개체(Entity)와 속성(Attribute) 추출

개체 -> 테이블
속성 -> 컬럼, 기본키 파악

당근마켓 엔터티

  • 회원
  • 동네
  • 관심 목록
  • 상품
  • 카테고리
  • 채팅방
  • 채팅
  • 매너 칭찬 목록
  • 후기 목록

4) 개체(Entity) 간의 관계 추출

  1. 테이블이 어느정도 파악됐다면, 테이블 간의 중복되는 정보가 있는지 확인
  2. 중복되는 정보가 있는 테이블 간의 관계를 파악
  • 1:1 관계 => 연결 관계에 있는 두 테이블 중 한 테이블에만 중복 정보를 기록하도록 연결 컬럼 설계
  • 1:N 관계 => 연결 컬럼을 어느 테이블에 추가하는 것이 좋을지 생각했을 때, 행의 개수를 추가하지 않고 유지되도록 설계
  • M:N 관계 => 연결 테이블 생성
  1. 연결키(외부키)로 참조관계 생성

당근마켓 엔터티 간의 관계 추출

  • 회원 - 동네 ⇒ M:N관계 ⇒ 관계테이블 생성 (사용자 동네 테이블)
  • 중고상품 - 동네 ⇒ M:N관계 ⇒ 관계테이블 생성 (상품 공개 동네 테이블)
  • 회원 - 관심 있는 중고상품 ⇒ M:N관계 ⇒ 관계테이블 생성 (관심목록 테이블)
  • 매너 칭찬 하는 회원 - 칭찬 받는 회원 ⇒ M:N관계 ⇒ 관계테이블 생성 (매너 칭찬 테이블)
  • 채팅 대상 상품 - 구매 희망 회원 ⇒ M:N관계 ⇒ 관계테이블생성 (거래 채팅방 테이블)
  • 상품 - 카테고리 ⇒ M:N관계 ⇒ 관계테이블 생성
  • 채팅방 - 채팅 ⇒ 1:N관계
  • 상품 - 판매자 ⇒ 1:N관계
  • 거래 후기, 구매자 - 상품 ⇒ 1:N 관계인데 거래후기 테이블을 따로 만드는 것이 맞는지?
  • 회원 - 자주사용하는문구 ⇒ 1:N 관계, 회원 테이블에 문구 컬럼을 추가하면 문구를 추가할 때마다 회원 기본 정보가 중복되므로 자주 사용하는 문구 테이블 생성
  • 상품 이미지 - 상품 ⇒ 1:N관계
  • 거래 후기 - 거래 후기 사진 ⇒ 1:N관계

📌 ERD 설계

1) ERD 작성

2) ERD 작성 시 주의사항

주의사항

  • PK의 데이터 타입은 BIGINT : 데이터가 무한히 많아지는 경우 고려
  • 회원정보에서 password의 데이터 타입은 길이를 넉넉하게 VARCHAR(200)으로 : password는 암호화 과정을 거친 후에 저장하기 때문에
  • 미디어 파일 URL의 데이터 타입은 TEXT
  • 채팅 테이블에서 메시지를 보내는 주체에 대한 컬럼도 추가
  • Y/N값으로 구분하는 필드의 경우 BIT자료형을 사용하면 true/false값으로 사용이 가능
  • 컬럼명명 규칙은 카멜케이스로 : java에서 카멜케이스 사용
  • createdAt, updatedAt, status 컬럼을 테이블에 전체적으로 추가하는 것을 추천, 필요 없는 테이블을 추려서 제외하는 방향으로 고려
    꼭 모든 테이블에 추가할 필요는 없지만, 서비스에서 중요한 데이터를 저장하는 테이블에는 추가해주는 것이 좋음
  • 음수를 사용하는 경우가 아니라면 int unsigned 타입으로 : 불필요한 공간을 최소화하기 위해



&링크모음
[1] 번개장터 ERD 자세히 보기, 나의 깃허브 링크, README

profile
https://github.com/DaanChoi

0개의 댓글