교과서형/기본형(목적 : ERD가 논리적으로 맞는지)
0단계)준비물(이것부터 있으면 쉬워짐)
화면/기능 목록(없으면 메모라도 OK)
예시 데이터 2~3개(진짜 값 아니어도 됨)
용어 통일 메모(“고객=셀러=회원?” 같은 것)
1단계) 업무 범위(경계) 정하기
이번 ERD에 포함할 도메인(예: 회원~주문까지만) 경계부터 확정
“이번 ERD에 어디까지 포함할 건지” 먼저 정해야 안 커져.
예: “회원/몰계정/신청/심사까지만”
제외: 결제, 정산, 상환, 알림, 로그…
산출물 느낌:
“ERD 범위: 신청(한도조회~심사결과)”
2단계) 엔티티(테이블) 후보 추출(뽑기)
요구사항에서 명사 뽑기: 고객/상품/주문/결제…
중복/동의어 정리(고객=회원 같은 것)
요구사항 문장에서 명사만 뽑아.
예)
고객, 몰, 신청, 심사결과, 금융사, 상품, 한도…
그 다음 비슷한 말 합치기
고객=회원=셀러 → customer 하나로
몰계정=스토어계정 → cust_mall 하나로
초보 팁
“데이터가 여러 건 쌓일 수 있는 것”은 테이블 가능성이 높아.
3단계) 엔티티 확정 + 이름 정하기
엔티티 명칭을 한 스타일로 통일(단수/복수, snake_case 등)
테이블 이름을 통일 규칙으로 정해.
snake_case 권장: fi_application, cust_mall
단수/복수도 하나로 통일(보통 단수)
체크
이 테이블이 “한 줄(1 row)”이 무엇을 의미하는지 말로 설명 가능해야 함
fi_application 1건 = “신청 1건”
4단계) 각 엔티티의 속성(컬럼) 나열(적기)
“무엇을 저장하는가?”를 컬럼으로 적기
타입은 대략만(문자/숫자/날짜) 잡아도 됨
각 테이블에 대해 이렇게 질문해:
(1) “이 row를 설명하는 필수 정보가 뭐지?”
고객: 사업자번호, 상호, 대표자, 연락처…
신청: 신청번호, 요청금액, 신청일시, 상태…
(2) “조회 화면에서 꼭 보여줘야 하는 값은?”
신청상태, 승인금액, 심사일시…
(3) “나중에 찾기 위한 검색키는?”
사업자번호, 신청번호, 몰아이디 등
초보 팁
처음부터 완벽하려고 하지 말고 “필수 + 자주 쓰는 것”만 먼저 적고 확장해도 됨.
5단계) 기본키(PK) 선정(정하기)
각 엔티티를 구분할 키 결정(보통 id)
자연키(이메일 등)는 PK로 할지/UNIQUE로 할지 결정
각 테이블에 PK를 1개 잡아.
보통 customer_id, app_id 같은 숫자 ID
그리고 “업무적으로 유일한 값”은 보통 UNIQUE로 둬.
사업자번호(biz_no) UNIQUE
신청번호(app_no) UNIQUE
초보에게 추천하는 패턴
PK는 단순한 id(자동증가/uuid)
자연키는 UNIQUE
6단계) 관계(Relationship) 찾기 + 카디널리티 정하기
엔티티 간 연결을 찾고
카디널리티(1:1, 1:N, N:M) 표시
이 단계가 ERD 핵심이야. 질문은 딱 2개:
A 한 건이 B 몇 건을 가질 수 있나?
B 한 건은 A에 몇 건에 속하나?
예)
고객 1명은 신청을 여러 번 할 수 있다 → customer 1 : N fi_application
신청 1건은 고객 1명에 속한다 → fi_application N : 1 customer
카디널리티는 보통:
1:1
1:N
N:M
초보 팁
대부분은 1:N이다.
N:M은 나중에 “중간테이블”로 풀어야 한다.
7단계) N:M이면 교차(연결) 엔티티 추가(N:M 관계면 “중간 테이블” 만들기)
예: 주문-상품 N:M → 주문항목(order_item) 만들기
예: 상품과 태그
상품 1개에 태그 여러 개
태그 1개가 상품 여러 개에 붙음
→ N:M
이걸 ERD에서 그대로 두면 DB로 구현이 어려움.
그래서 교차(연결) 테이블을 만든다:
product_tag(product_id FK, tag_id FK)
초보 팁
“둘 다 여러 개”면 중간 테이블을 떠올려.
8단계) 외래키(FK) 배치(관계 구현)
보통 N 쪽에 FK
선택 관계인지(Nullable)도 결정
원칙:
1:N이면 N쪽 테이블에 FK가 들어간다
예)
customer 1 : N application
→ application 테이블에 customer_id FK
그리고 선택 관계인지 결정:
“반드시 있어야 하면” NOT NULL
“없어도 되면” NULL 허용
예)
decision은 신청 후에 생길 수 있으니
decision 테이블의 app_id는 NOT NULL
신청이 decision을 “반드시” 갖는 건 아니므로(0..1) 관계 표현만 그렇게
9단계) 정규화 점검체크(중복/반복 제거)
컬럼에 여러 값 들어가는지(리스트/콤마) 체크
반복 그룹, 파생값(계산값) 저장 여부 검토
초보가 쉽게 보는 체크리스트:
(1) 한 컬럼에 여러 값 들어가나?
“tag = A,B,C” 같은 형태 → 잘못 (테이블 분리)
(2) 같은 정보가 여러 테이블에 반복 저장되나?
고객 전화번호가 신청에도 있고 고객에도 있음
보통은 customer에만 두고 참조
단, “신청 당시 전화번호”를 기록해야 하면 예외적으로 스냅샷 가능
(3) 의미가 섞여 있나?
주소 한 칸에 “서울…상세…” 다 넣음 → address table or 컬럼 분리 고려
10단계) 제약조건/규칙 반영
NOT NULL, UNIQUE, CHECK(상태값)
참조 무결성(삭제/수정 규칙)까지 표시하면 좋음
ERD에 표시하거나 문서로라도 남겨.
NOT NULL: 필수값
UNIQUE: 사업자번호, 신청번호
CHECK/코드: 상태값은 정해진 값만
FK 제약: 참조 무결성
초보 팁
“상태”는 꼭 통제해라.
예: RECEIVED / UNDER_REVIEW / APPROVED / REJECTED
11단계) 검증(가상 데이터로 시뮬레이션)
대표 시나리오 2~3개를 가상 데이터로 넣어본다고 생각하고
“이 구조로 저장/조회가 되는가?”로 검토
이게 초보에게 가장 중요해.
시나리오 2~3개를 손으로 넣어보기
고객 1명 생성
몰계정 2개 연결
신청 1건 생성
심사결정 1건 생성(승인)
또 다른 신청은 결정이 아직 없음(0..1 확인)
이때 확인할 것:
“저장 못하는 상황이 생기나?” (FK 때문에)
“중복이 생기나?”
“조회하려면 조인이 너무 복잡한가?”
이 순서대로 하면 ERD가 “그럴듯하게” 나온다기보다, 논리적으로 안 꼬인 ERD가 나와요
초보용 “한 장 요약 체크리스트”
테이블 1줄이 뭘 의미하는지 말로 설명 가능?
모든 테이블에 PK 있음?
1:N이면 N쪽에 FK 들어갔음?
N:M은 중간테이블로 풀었음?
리스트/콤마 컬럼 없음?
상태값은 통제됨(코드/ENUM/제약)?
가상 시나리오 2개는 무리 없이 저장/조회 가능?
실무형(목적:나중에 운영/성능/변경에 안 터지는지)
Step 1. 업무 흐름 1장으로 고정(텍스트/박스)
상태가 바뀌는 지점에 동그라미 치기
→ 이 지점들이 보통 테이블(이력/결과) 후보가 됨
Step 2. 명사 뽑기 → 엔티티(테이블) 후보
여기서 핵심 엔티티(변하지 않는 것) vs 이벤트/이력(변하는 것) 구분
핵심: 고객/몰/금융기관
이벤트: 신청/신청결정/변경이력
Step 3. PK를 먼저 찍고 시작
각 엔티티에 *_id 하나씩 PK 박기
ERD에서 PK는 최우선(관계선 그릴 때 기준점)
Step 4. 관계선(카디널리티) 먼저 그리기
1:N, N:M 판단
N:M이면 중간테이블 만들고 다시 1:N 두 개로 풀기
(여기서 ERD가 급정리됨)
Step 5. FK를 확정하고 “필수/선택” 표시
신청은 고객 없이 존재 못함 → customer_id 필수
결정은 신청 뒤에 생김 → app_id 필수 + 신청 기준 optional(0..1)
Step 6. 속성(컬럼)은 “화면/요청/응답” 기준으로 채우기
ERD에 컬럼을 빼곡히 넣기 전에,
신청 화면에 필요한 값, API 요청/응답 필드,조회 화면(상태/금액/일자) 이걸로 최소 컬럼부터 넣기
Step 7. 제약(UNIQUE/코드값/상태) 표시
app_no UNIQUE
fi_code UNIQUE
decision.app_id UNIQUE(1:1 강제)
상태값은 코드 테이블 or ENUM 정책 결정
Step 8. “이력/로그”는 마지막에 별도로 붙이기
초보가 처음부터 로그까지 ERD에 넣으면 복잡도 폭증
제출용 ERD는 보통
Core ERD(핵심), History/Log ERD(부록)로 나눠 제출하면 깔끔함
ERD 제출 산출물 구성(추천)
(1) Core ERD 1장: customer / mall / fi / application / decision
(2) 용어사전(Data Dictionary): 테이블/컬럼 의미, 타입, 제약
(3) 주요 흐름 1장: 상태 전이 다이어그램(신청상태)