WEART라는 제목의 프로젝트를 진행하면서 필요한 DB를 설계하는 과정을 기록해 볼까 합니다.
ER다이어그램을 작성은 협업을 하면서도 구체화 하기 위해 필연적인 작업입니다.
A
개발자들은 다른 사람들과 협업하려면 머리 속에 있는 시스템을 눈으로 이해할 수 있는 자료가 있어야한다.
ERD란 말 그대로 데이터(Entity)들의 관계(Relationship)를 그림으로 표현한 것이다. 데이터베이스 구조를 한 눈에 알아보기 위해 그려놓는 다이어그램입니다.
각 도형의 의미를 먼저 알아보면 이러하다.
저 동그라미와 세모 직선은 무슨 의미죠?
이런 뜻입니다.
SpringBoot 개발할때도 어노테이션중 @OneToMany @ManyToOne 이런 것들 보셨죠? 그런걸 위 그림처럼 표시합니다.
그럼 ERD 에 필요한 테이블과 칼럼들을 어떻게 정리하면 좋을까요?
정석? 적인 방법은
추출 방법
위 추출방법으로 우리 경매 사이트 WEART 프로젝트의 명세서를 작성해 보겠습니다
가입한 회원에게는 신뢰도가 크레딧이 부여된다.
회원은 닉네임으로 식별한다. (닉네임 중복 불가)
회원은 예술품을 등록할 때 예술품이름, 예술품 소개, 경매시작 가격을 작성해야 한다.
예술품 소개(게시물)는 사진, 소개글, 예술품 카테고리, 예술품 경매 시작 시간(즉시 시작, 지정 시간), 입찰 가격 단위에 대한 정보가 있다. - 게시글 DB에 들어갈 내용.
회원은 게시글을 수정할 수 있다.
게시글은 게시글 번호로 식별할 수 있다.
예술품은 예술품 코드로 식별을 한다.
회원은 자신이 관심이 있는 예술품에 대하여 장바구니에 넣을 수 있다.
회원의 장바구니에 있는 상품에 대해 경매가 시작할 때 알람이 울린다.
회원의 경매에 참여한 상품에 대해 30분전 경매가 끝나기 전에 알람이 울린다.
회원의 경매에 참여한 상품의 입찰가가 바뀔때 알람이 울린다.
사용자가 알람을 키고 끌 수 있다.
회원은 장바구니에 있는 상품들을 삭제할 수 있다.
입찰 시간이 끝나면 입찰완료로 예술품 상태가 변경된다.
입찰 완료가 된 예술품에 대해 입찰한 회원은 7일 이내에 결제를 해야한다.
결제 완료가 될 경우에, 판매자가 판매 완료 버튼을 눌러서 게시물의 상태를 판매 완료로 변경한다.
가격 제시할 때, 제품의 가격보다 자신의 크레딧이 적을경우 가격을 제시할 수 없다.
회원 | 닉네임, 이메일, 비밀번호, 이름, 신뢰도, 크레딧 |
---|---|
예술품 | 예술품 코드, 사진, 소개글, 예술품 이름, 경매시작 가격, 예술품 카테고리, 예술품 경매 시작시간, 예술품 상태 |
장바구니 | 장바구니 코드 |
알람 | 알람 코드, 알람 시간 |
이정도를 먼저 작성했습니다.
정리를 했으면 이제 ERD를 그려야겠죠?
처음에 Quick DBD를 사용하면 아래처럼 예시가 나올겁니다!
# Modify this code to update the DB schema diagram.
# To reset the sample schema, replace everything with
# two dots ('..' - without quotes).
Customer
-
CustomerID PK int
Name string INDEX
Address1 string
Address2 NULL string
Address3 NULL string
Order
-
OrderID PK int
CustomerID int FK >- Customer.CustomerID
TotalAmount money
OrderStatusID int FK >- os.OrderStatusID
OrderLine as ol
----
OrderLineID PK int
OrderID int FK >- Order.OrderID
ProductID int FK >- p.ProductID
Quantity int
# Table documentation comment 1 (try the PDF/RTF export)
Product as p # Table documentation comment 2
------------
ProductID PK int
# Field documentation comment 1
# Field documentation comment 2
Name varchar(200) UNIQUE # Field documentation comment 3
Price money
OrderStatus as os
----
OrderStatusID PK int
Name UNIQUE string
프로그래머라면 이정도만 봐도 무슨 문법인지 다들 감이 오나요?
테이블은 --- 로 구분을 하게 됩니다.
아래 칼럼들 간의 PK FK와 관계를 작성하는 ERD Notation 에 대한 설명입니다.
One : 일대일 혹은 일대다 관계
Many : 다대다 관계
One (and only one) : 일대일 관계(하나의 row끼리만 연결)
Zero or one : 일대일 혹은 일대다 관계지만, 필수 조건이 아님
One or Many : 일대일 혹은 다대다 관계
Zero or Many : 참조하는 테이블과의 관계가 불명확
주로 1,2,5 번을 저는 많이 쓰더라구요. 일방적인 관계를 사용할때는 3번을 작성합니다.
다음 포스팅에는 우리 프로젝트의 ERD를 그려보고 어떻게 작성해야 하는지 구체적으로 올려보겠습니다.
포스팅 출처 https://velog.io/@chloe37/ 에서 참고 했습니다. 감사합니다.