| –← Week 8 | 목차 | 다음: Week 10 →– |
Week 9: 시스템 요구사항 구조화 2 - 데이터 모델링 🗃️
📌 학습 목표
- ✅ 데이터 중심 접근법의 개념과 장점 이해
- ✅ ERD의 기본 구성요소와 표기법 습득
- ✅ 엔티티, 속성, 관계의 정의와 식별 방법 학습
- ✅ 카디널리티와 참여도를 통한 정확한 관계 모델링 능력 개발
- ✅ 정규화 과정을 통한 데이터베이스 품질 향상 기법 습득
🎯 데이터 중심 접근법
개념 정의
데이터를 중심으로 시스템을 분석하고 설계하는 방법론
프로세스 중심 vs 데이터 중심
| 구분 | 프로세스 중심 | 데이터 중심 |
|---|---|---|
| 초점 | 업무 처리 절차 | 저장할 데이터 구조 |
| 안정성 | 프로세스 변경에 민감 | 상대적으로 안정적 |
| 도구 | DFD, Mini-Spec | ERD, 데이터 사전 |
| 장점 | 업무 흐름 명확화 | 데이터 무결성 보장 |
데이터 중심 접근법의 장점 ✨
- 데이터 안정성: 비즈니스 규칙보다 데이터 구조가 더 안정적
- 중복 최소화: 정규화를 통한 데이터 중복 제거
- 무결성 보장: 참조 무결성 등 제약조건으로 데이터 품질 확보
- 재사용성: 여러 애플리케이션에서 동일한 데이터 구조 활용
🏗️ ERD (Entity-Relationship Diagram) 기초
ERD의 정의 및 목적
- 정의: 엔티티 간의 관계를 그래픽으로 표현한 다이어그램
- 목적: 데이터베이스 구조의 논리적 설계
- 표기법: Peter Chen 표기법, IE(Information Engineering) 표기법
👥 엔티티 (Entity)
엔티티 정의
독립적으로 존재할 수 있으며, 구별 가능한 객체의 집합
엔티티 유형
1. 강한 엔티티 (Strong Entity) 💪
- 특징: 다른 엔티티에 의존하지 않고 독립적으로 존재
- 표기: 실선 사각형
- 예시: 고객, 제품, 부서
┌─────────────┐
│ 고객 │
├─────────────┤
│ 고객번호 │ ← 기본키
│ 고객명 │
│ 연락처 │
└─────────────┘
2. 약한 엔티티 (Weak Entity) 🤝
- 특징: 강한 엔티티에 의존하여 존재
- 표기: 이중선 사각형
- 예시: 주문상세 (주문에 의존), 부양가족 (직원에 의존)
╔═════════════╗
║ 주문상세 ║
╠═════════════╣
║ 순번 ║ ← 부분키
║ 수량 ║
║ 단가 ║
╚═════════════╝
엔티티 식별 기준 ✅
- 명사형: 사람, 장소, 사물, 사건
- 인스턴스 존재: 2개 이상의 인스턴스
- 속성 보유: 관리해야 할 속성들
- 관계 존재: 다른 엔티티와의 관계
- 업무 관련성: 비즈니스 프로세스와 관련
🔤 속성 (Attribute)
속성 분류
1. 구성에 따른 분류
단순 속성 (Simple Attribute)
- 특징: 더 이상 분해되지 않는 원자값
- 예시: 나이, 성별, 급여
복합 속성 (Composite Attribute)
- 특징: 여러 요소로 분해 가능
- 예시: 주소(시, 구, 동, 번지), 성명(성, 이름)
2. 값의 수에 따른 분류
단일값 속성 (Single-valued)
- 특징: 하나의 값만 가짐
- 예시: 주민등록번호, 생년월일
다중값 속성 (Multi-valued)
- 특징: 여러 개의 값을 가질 수 있음
- 표기: 이중 타원
- 예시: 취미, 자격증, 전화번호
3. 값의 유도에 따른 분류
저장 속성 (Stored Attribute)
- 특징: 직접 저장되는 값
- 예시: 생년월일, 입사일
유도 속성 (Derived Attribute)
- 특징: 다른 속성으로부터 계산되는 값
- 표기: 점선 타원
- 예시: 나이(생년월일로부터), 근속년수(입사일로부터)
속성 표기법
┌─────────────────┐
│ 직원 │
├─────────────────┤
│ * 직원번호 │ ← 기본키 (*)
│ 직원명 │
│ 주소 │ ← 복합속성
│ ○ 취미 │ ← 다중값 (○)
│ (나이) │ ← 유도속성 ()
└─────────────────┘
🔗 관계 (Relationship)
관계의 정의
두 개 이상의 엔티티 간에 존재하는 연관성
관계의 유형
1. 1:1 관계 (One-to-One)
- 정의: 한 엔티티의 인스턴스가 다른 엔티티의 인스턴스 하나와만 관련
- 예시: 직원 - 사원증, 국가 - 수도
2. 1:N 관계 (One-to-Many)
- 정의: 한 엔티티의 인스턴스가 다른 엔티티의 여러 인스턴스와 관련
- 예시: 고객 - 주문, 부서 - 직원
3. M:N 관계 (Many-to-Many)
- 정의: 양쪽 엔티티 모두 여러 인스턴스와 관련
- 예시: 학생 - 과목, 배우 - 영화
- 구현: 연결 엔티티(교차 테이블) 생성 필요
카디널리티 & 참여도
카디널리티 (Cardinality) 🔢
- 최대 카디널리티: 관계에 참여할 수 있는 최대 인스턴스 수
- 표기: 1, N, M
참여도 (Participation) 👫
- 전체 참여 (Total): 모든 인스턴스가 관계에 참여 (이중선)
- 부분 참여 (Partial): 일부 인스턴스만 관계에 참여 (단일선)
고객 ──────< 주문 >══════ 제품
│ 1 N N M │
└─ 부분참여 전체참여 ─┘
📐 정규화 (Normalization)
정규화의 목적 🎯
- 데이터 중복 최소화: 저장공간 효율성
- 갱신 이상 방지: 삽입/수정/삭제 이상 현상 방지
- 데이터 무결성 보장: 일관성 있는 데이터 유지
정규화 단계
1차 정규형 (1NF) 📝
조건: 모든 속성이 원자값(atomic value)을 가져야 함
비정규화 테이블 | 학생ID | 학생명 | 수강과목 | |——–|———|———–| | S001 | 김철수 | 수학, 영어, 과학 |
1NF 적용 | 학생ID | 학생명 | 수강과목 | |——–|———|———–| | S001 | 김철수 | 수학 | | S001 | 김철수 | 영어 | | S001 | 김철수 | 과학 |
2차 정규형 (2NF) 📋
조건: 1NF + 부분함수 종속성 제거
문제 상황: 복합키의 일부에만 종속되는 속성 존재
2NF 적용: 별도 테이블로 분리
- 학생수강(학생ID, 과목코드, 성적)
- 과목(과목코드, 과목명, 담당교수)
3차 정규형 (3NF) 📊
조건: 2NF + 이행함수 종속성 제거
문제 상황: 기본키가 아닌 속성에 종속되는 속성 존재
3NF 적용:
- 학생(학생ID, 학생명, 학과코드)
- 학과(학과코드, 학과명, 학과장)
BCNF (Boyce-Codd Normal Form) 🏆
조건: 3NF + 모든 결정자가 후보키
적용 상황: 여러 후보키가 존재하고 서로 겹치는 경우
🛠️ 정규화 실습 예제
초기 비정규화 테이블
주문정보 테이블
┌──────┬────────┬──────┬──────┬──────┬──────┬──────┐
│주문번호│ 주문일자 │고객명 │고객주소│상품명 │수량 │단가 │
├──────┼────────┼──────┼──────┼──────┼──────┼──────┤
│ O001 │2024-03-15│홍길동│서울시│사과,바나나│2,3│1000,1500│
└──────┴────────┴──────┴──────┴──────┴──────┴──────┘
단계별 정규화
1NF 적용: 다중값 분해
주문상세 테이블
┌──────┬────────┬─────┬──────┬─────┬────┬────┐
│주문번호│ 주문일자 │고객명│고객주소│상품명│수량│단가│
├──────┼────────┼─────┼──────┼─────┼────┼────┤
│ O001 │2024-03-15│홍길동│ 서울시│ 사과│ 2│1000│
│ O001 │2024-03-15│홍길동│ 서울시│바나나│ 3│1500│
└──────┴────────┴─────┴──────┴─────┴────┴────┘
2NF 적용: 부분함수 종속 제거
주문 테이블 주문상세 테이블
┌──────┬────────┬─────┬──────┐ ┌──────┬─────┬────┬────┐
│주문번호│ 주문일자 │고객명│고객주소│ │주문번호│상품명│수량│단가│
└──────┴────────┴─────┴──────┘ └──────┴─────┴────┴────┘
3NF 적용: 이행함수 종속 제거
주문 테이블 고객 테이블 상품 테이블
┌──────┬────────┬───┐ ┌───┬─────┬──────┐ ┌─────┬────┐
│주문번호│ 주문일자 │고객ID│ │고객ID│고객명│고객주소│ │상품명│단가│
└──────┴────────┴───┘ └───┴─────┴──────┘ └─────┴────┘
주문상세 테이블
┌──────┬─────┬────┐
│주문번호│상품명│수량│
└──────┴─────┴────┘
📚 참고 자료
- Peter Chen, “The Entity-Relationship Model”
- C.J. Date, “An Introduction to Database Systems”
- 한국데이터베이스학회, 『데이터베이스 시스템』
| **© 2024-2025 한국공학대학교 경영학부 | All Rights Reserved** |