메뉴 여닫기
개인 메뉴 토글
로그인하지 않음
만약 지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

데이터 모델링 ERD작성 실습: 두 판 사이의 차이

DB스터디
(새 문서: <div style="background:linear-gradient(135deg,#0b4d40 0%,#118a72 55%,#16a085 100%);color:#ffffff;padding:30px 36px;border-radius:14px;margin-bottom:24px;box-shadow:0 4px 14px rgba(11,77,64,0.25);"> <div style="font-size:12px;letter-spacing:3px;opacity:0.8;margin-bottom:6px;">DATA MODELING · HANDS-ON LAB</div> <div style="font-size:28px;font-weight:700;line-height:1.3;">ERD 작성 실습</div> <div style="font-size:15px;opacity:0.92;margin-top:10px;line-height:1.7;">업무 기...)
 
편집 요약 없음
237번째 줄: 237번째 줄:


<div style="margin-top:30px;padding:14px 20px;border-top:3px solid #0b4d40;background:#f3faf8;border-radius:0 0 10px 10px;font-size:13px;color:#3d5a52;">
<div style="margin-top:30px;padding:14px 20px;border-top:3px solid #0b4d40;background:#f3faf8;border-radius:0 0 10px 10px;font-size:13px;color:#3d5a52;">
'''이전''' ← [[데이터 모델링 입문]] · [[정규화 심화]] &nbsp;|&nbsp; '''다음''' → [[Oracle 물리 설계]]
'''이전''' ← [[데이터 모델링 입문]] · [[데이터 모델링 정규화 심화]] &nbsp;|&nbsp; '''다음''' → [[Oracle 물리 설계]]
</div>
</div>


[[분류:데이터 모델링]]
[[분류:데이터 모델링]]
[[분류:실습]]
[[분류:실습]]

2026년 11월 4일 (수) 12:38 판

DATA MODELING · HANDS-ON LAB
ERD 작성 실습
업무 기술서 한 장에서 완성된 논리 ERD까지 — 실제 모델러의 작업 순서 그대로

선수 학습 · 데이터 모델링 입문 3~4장 커리큘럼 · 3~6주차 소요 · 약 3시간

0. 실습 개요

STEP 1
업무 분석
STEP 2
엔터티 도출
STEP 3
관계 설정
STEP 4
식별자·속성
STEP 5
정규화·검증
STEP 6
산출물 작성

준비물 ERD 도구 1개 (Oracle SQL Developer Data Modeler, ERDCloud, draw.io, ERwin 중 택1), 종이와 펜 (첫 스케치는 손으로 그리는 것을 권장)

1. STEP 1 — 업무 기술서 읽기

〈 동네 도서관 대출 관리 시스템 〉

① 도서관은 회원에 가입한 사람에게만 책을 대출한다. 회원은 이름, 생년월일, 연락처, 가입일자를 관리한다.
② 도서관은 도서를 소장한다. 같은 제목의 책이라도 여러 권을 보유할 수 있으며, 각 권은 별도의 등록번호로 관리한다.
③ 도서 정보로는 ISBN, 제목, 출판사, 출판연도가 있으며, 한 도서에는 저자가 여러 명일 수 있고 한 저자는 여러 도서를 쓸 수 있다.
④ 도서는 분류(총류, 철학, 사회과학 …)에 속하며, 분류는 대분류-중분류처럼 계층을 가진다.
⑤ 회원은 한 번에 최대 5권까지 대출할 수 있으며, 대출 기간은 14일이다. 반납일자를 기록하고, 연체 시 연체일수만큼 대출이 정지된다.
⑥ 대출 중인 책은 다른 회원이 예약할 수 있다. 예약은 예약일자와 상태(대기/대출가능/취소)를 관리한다.
⑦ 대출과 반납은 사서가 처리하며, 어떤 사서가 처리했는지 기록한다.

2. STEP 2 — 엔터티 도출

2.1 명사 추출

업무 기술서에서 명사에 밑줄을 긋고 후보를 나열한다.

도서관, 회원, 사람, 책, 이름, 생년월일, 연락처, 가입일자, 도서, 제목, 권, 등록번호,
ISBN, 출판사, 출판연도, 저자, 분류, 대분류, 중분류, 대출, 대출기간, 반납일자,
연체, 연체일수, 예약, 예약일자, 상태, 사서

2.2 후보 걸러내기

후보 판정 이유
도서관 ✕ 인스턴스가 1건 (단일 도서관) → 엔터티 조건 미충족
회원 ○ 엔터티 관리 대상, 다수 인스턴스, 고유 식별 가능
이름, 생년월일, 연락처 속성 회원을 설명하는 정보
도서 ↔ 책(권) ○ 2개 엔터티 제목 단위 도서와 실물 단위 소장도서를 구분해야 함 (②)
저자 ○ 엔터티 도서와 M:N 관계 (③)
출판사 △ 출판사 정보를 별도 관리하지 않으면 도서의 속성 (이번 실습은 속성)
분류 ○ 엔터티 계층 구조 → 순환 관계 (④)
대출 ○ 엔터티 사건(행위) 엔터티, 업무의 중심
연체, 연체일수 파생 속성 반납일자 − 반납예정일자로 계산 가능
예약 ○ 엔터티 사건 엔터티 (⑥)
사서 ○ 엔터티 대출·반납 처리자 (⑦)

💡 가장 흔한 실수 — "도서"와 "소장도서(실물 한 권)"를 하나로 합치는 것. 합치면 같은 책 3권을 보유할 때 제목·ISBN·저자가 3번 중복 저장되고, 대출 대상이 어느 권인지 구분할 수 없다.

3. STEP 3 — 관계 설정

3.1 관계 매트릭스

엔터티 쌍마다 "관계가 있는가?"를 체크한다.

회원 도서 소장도서 저자 분류 대출 예약 사서
회원 – ● ●
도서 – ● ● (M:N) ● ●
소장도서 – ●
분류 ● (순환)
대출 – ●

※ 예약 대상은 특정 권이 아니라 도서(제목) 단위가 업무상 자연스럽다 — 어느 권이든 먼저 반납되면 대출 가능

3.2 관계 정의서

부모 자식 차수 선택성 (자식 기준) 관계명 유형
회원 대출 1 : N 필수 회원은 대출을 한다 비식별
소장도서 대출 1 : N 필수 소장도서는 대출된다 비식별
사서 대출 1 : N 필수 사서는 대출을 처리한다 비식별
도서 소장도서 1 : N 필수 도서는 여러 권 소장된다 비식별
분류 도서 1 : N 필수 도서는 분류에 속한다 비식별
분류 분류 1 : N 선택 분류는 하위 분류를 가진다 순환
회원 예약 1 : N 필수 회원은 예약을 한다 비식별
도서 예약 1 : N 필수 도서는 예약된다 비식별
도서 ↔ 저자 도서저자 M : N → 1:N + 1:N 필수 저자는 도서를 집필한다 식별

4. STEP 4 — 식별자와 속성 정의

엔터티 주식별자 (PK) 주요 속성 비고
회원 회원번호 회원명, 생년월일, 연락처, 가입일자, 대출정지종료일자 대출정지는 연체 처리 결과 저장
사서 사서번호 사서명, 입사일자
분류 분류코드 분류명, 상위분류코드(FK) 순환 관계
도서 도서번호 ISBN(AK), 제목, 출판사명, 출판연도, 분류코드(FK) ISBN이 없는 고서 대비 인조식별자 사용
저자 저자번호 저자명
도서저자 도서번호 + 저자번호 저자순서, 저자역할(저/역/편) 교차 엔터티, 식별 관계
소장도서 등록번호 도서번호(FK), 입수일자, 소장상태 등록번호는 업무 본질식별자
대출 대출번호 회원번호, 등록번호, 사서번호, 대출일자, 반납예정일자, 반납일자 반납일자 NULL = 대출 중
예약 예약번호 회원번호, 도서번호, 예약일자, 예약상태코드

토론 포인트 — 대출의 PK를 인조식별자(대출번호) 대신 (등록번호, 대출일시)로 하면 어떤 장단점이 있을까? 같은 책을 같은 날 두 번 대출할 수 있는지(반납 후 재대출) 업무 규칙을 먼저 확인해야 한다.

5. STEP 5 — 완성 ERD

                       ┌─────────────┐
                ┌─────►│    분류      │
                │      │ # 분류코드   │
                └──○───┤ o 상위분류코드│
                       └──────┬──────┘
                              │1
                             ┼<N
 ┌─────────────┐       ┌──────┴──────┐        ┌─────────────┐
 │    저자      │1    N │    도서      │1     N │  소장도서    │
 │ # 저자번호   ├──┼──┼<│ # 도서번호   ├──┼──┼< │ # 등록번호   │
 └─────────────┘  │    │ * ISBN (AK)  │        │ * 도서번호   │
          ┌───────┴──┐ │ * 제목       │        └──────┬──────┘
          │ 도서저자  │ └──────┬──────┘               │1
          │ #도서번호 │        │1                     ○<N
          │ #저자번호 │       ○<N               ┌──────┴──────┐
          └──────────┘ ┌──────┴──────┐  N    1  │    대출      │
                       │    예약      │>○──┐    │ # 대출번호   │
                       │ # 예약번호   │    │    │ * 대출일자   │
                       └─────────────┘    │    │ o 반납일자   │
                                          │    └───┬─────┬───┘
                               ┌──────────┴──┐     │N    │N
                               │    회원      │1───┘     │
                               │ # 회원번호   │     ┌────┴────┐
                               └─────────────┘     │  사서    │1
                                                   │#사서번호 │
                                                   └─────────┘

5.1 업무 규칙 검증

업무 규칙 모델에서의 반영 반영 수단
최대 5권 대출 반납일자 IS NULL 인 대출 건수 ≤ 5 애플리케이션 / 트리거 (구조로 표현 불가)
대출 기간 14일 반납예정일자 = 대출일자 + 14 DEFAULT 또는 애플리케이션
연체 시 대출 정지 회원.대출정지종료일자 반납 처리 시 갱신
한 권은 동시에 한 명만 대출 등록번호별 반납일자 NULL 행 1건 함수 기반 UNIQUE 인덱스 (Oracle)
-- Oracle: "대출 중인 책은 한 건만" 규칙을 함수 기반 유니크 인덱스로 강제
CREATE UNIQUE INDEX UX_LOAN_ACTIVE
    ON TB_LOAN (CASE WHEN RETURN_DT IS NULL THEN REG_NO END);

6. STEP 6 — 산출물

산출물 내용 체크
논리 ERD IE 표기법, 관계명·차수·선택성 표기 □
엔터티 정의서 엔터티명, 정의, 유형, 예상 건수, 주식별자 □
속성 정의서 속성명, 정의, 도메인, 필수 여부, 예시 값 □
관계 정의서 부모/자식, 차수, 선택성, 식별 여부 □
업무 규칙 목록 모델로 표현되지 않는 규칙과 구현 방안 □

7. 추가 과제

과제 A · 수강신청
학생, 교수, 과목, 개설강좌(학기별), 수강, 강의실, 시간표. "같은 과목도 학기·분반별로 개설된다"를 반영하라.

과제 B · 병원 예약
환자, 의사, 진료과, 진료일정, 예약, 진료기록, 처방. 의사의 진료과 변경 이력을 관리하라.

과제 C · 사내 DB 자산 관리
서버, DB 인스턴스, 스키마, 담당자, 패치 이력, 백업 정책. RAC처럼 하나의 DB가 여러 서버에 걸치는 구조를 표현하라.