Requirements to ERD
요구사항으로 ERD 만드는 법
실제 요구사항 문장에서 엔터티, 컬럼, 관계를 뽑아 ERD 초안으로 바꾸는 단계별 예시입니다.
상황
요구사항으로 ERD 만드는 법
작은 도서 대여 서비스 요구사항을 읽고 테이블 후보와 관계를 정리하는 예시입니다.
입력
요구사항 문장
출력
테이블, 컬럼, 관계 초안
주의점
동사보다 저장할 명사부터 찾기
요구사항
요구사항
- 회원은 책을 검색하고 대여 신청을 할 수 있다.
- 한 책은 여러 권의 물리적 사본을 가질 수 있다.
- 대여는 시작일, 반납 예정일, 실제 반납일, 연체 상태를 가진다.
- 회원은 책에 리뷰를 남길 수 있다.
테이블 설계
테이블 설계
members대여 회원- id PK
- email UNIQUE
- name
- joined_at
books도서 정보- id PK
- isbn UNIQUE
- title
- author
book_copies물리적 책 사본- id PK
- book_id FK
- barcode UNIQUE
- status
loans대여 건- id PK
- member_id FK
- book_copy_id FK
- started_at
- due_at
- returned_at
reviews도서 리뷰- id PK
- member_id FK
- book_id FK
- rating
- body
관계
관계
books 1:N book_copiesmembers 1:N loansbook_copies 1:N loansmembers 1:N reviewsbooks 1:N reviews
설계 포인트
설계 포인트
책 정보와 책 사본을 분리합니다
하나의 도서 정보는 여러 물리 사본을 가질 수 있습니다. 대여 가능 여부는 books가 아니라 book_copies.status에서 관리합니다.
요구사항의 명사를 테이블 후보로 봅니다
회원, 책, 사본, 대여, 리뷰처럼 저장해야 하는 명사를 먼저 뽑고, 단순 상태나 계산값은 컬럼 후보로 분류합니다.
업무 규칙은 관계 수량으로 검증합니다
회원 한 명이 여러 대여를 만들 수 있는지, 책 사본 하나가 동시에 여러 대여에 묶일 수 있는지 질문하며 카디널리티를 확정합니다.
구현 전 체크
구현 전 체크
- 동시에 대여 중인 book_copy_id가 중복되지 않도록 활성 대여 제약을 검토합니다.
- reviews(member_id, book_id)는 정책에 따라 UNIQUE를 둘 수 있습니다.
- 반납 후 이력 보존을 위해 loans는 삭제하지 않습니다.
다른 ERD 예시
다른 ERD 예시
예시를 그대로 따라 그리거나, 가입 전 데모 캔버스에서 테이블과 관계를 먼저 만져볼 수 있습니다.