1. 데이터 모델링의 이해
1-1. 데이터 모델링이란?
현실 세계의 업무를 데이터베이스로 옮기기 위해 추상화·단순화·명확화하는 과정.
- 추상화 (Abstraction): 현실을 일정한 형식(표기법)으로 표현
- 단순화 (Simplification): 복잡한 현실을 이해하기 쉽게 표현
- 명확화 (Clarity): 모호함 없이 정확히 표현
⚠️ 데이터 모델링의 유의점 (피해야 할 위험 요소)
- 중복 최소화 (Duplication): 같은 데이터를 여러 곳에 저장하지 않도록 설계
- 비유연성 최소화 (Inflexibility): 사소한 업무 변화에 모델 전체가 흔들리지 않도록 설계
- 비일관성 최소화 (Inconsistency): 같은 데이터가 서로 다른 값으로 존재하지 않도록 설계
💡 핵심 포인트:
- 모델링의 특징: 추상화 · 단순화 · 명확화 (구체화X, 복잡화X, 일반화X)
- 모델링 시 유의점: 중복 · 비유연성 · 비일관성 최소화
(두 세트가 시험에 매우 자주 출제되므로 서로 섞이지 않도록 주의!)
1-2. 데이터 모델링의 3단계 (진행 순서)
| 단계 | 특징 | 핵심 |
|---|---|---|
| 개념적 모델링 | 업무 중심, 포괄적 | 추상화 수준 높음, 전사적 데이터 모델링에 활용 |
| 논리적 모델링 | 키, 속성, 관계 중심 | 정규화 수행, DBMS에 종속적이지 않음 |
| 물리적 모델링 | DBMS 종속적 | 실제 테이블/컬럼으로 구현, 성능/저장 구조 고려 |
💡 진행 순서: 개념적 → 논리적 → 물리적 (역순 또는 순서 교란 문제에 주의)
개념적 모델링 : ERD
논리적 모델링 : 테이블
물리적 모델링 : 인덱스/뷰
1-3. 데이터 모델의 3요소
| 요소 | 설명 | 예시 |
|---|---|---|
| 구조 (Structure) | 데이터의 정적 구조 | 엔터티, 속성, 관계 |
| 연산 (Operation) | 데이터를 처리하는 방법 | INSERT, UPDATE, DELETE, 트랜잭션 |
| 제약조건 (Constraint) | 구조와 연산에 대한 논리적 제약 | PK 유일성, NOT NULL 등 |
1-4. 3층 스키마 (ANSI/SPARC)
| 스키마 | 관점 | 설명 | 개수 |
|---|---|---|---|
| 외부 스키마 (External) | 사용자 관점 | 개인/그룹이 보는 뷰 (View 단위) | 여러 개 |
| 개념 스키마 (Conceptual) | 조직 전체 관점 | 통합된 데이터베이스 구조 | 1개 |
| 내부 스키마 (Internal) | 저장 관점 | 물리적 저장 구조, 파일 구조 | 1개 |
1-5. 데이터 독립성
| 종류 | 정의 | 관련 사상 (Mapping) |
|---|---|---|
| 논리적 독립성 | 논리적(개념) 구조가 변경되어도 응용 프로그램(외부 스키마)이 영향받지 않음 | 외부 ↔ 개념 사상 |
| 물리적 독립성 | 물리적(내부) 구조가 변경되어도 개념 스키마가 영향받지 않음 | 개념 ↔ 내부 사상 |
2. 데이터 모델링의 구성 요소 (핵심 ⭐)
2-1. 엔터티 (Entity)
업무에서 관리가 필요한 저장되는 정보의 집합 단위. 인스턴스(행)의 집합이며 2개 이상의 인스턴스가 있어야 함.
📌 엔터티의 특징 (시험 최다 출제)
- 업무에서 관리하고자 하는 정보여야 한다.
- 유일한 식별자로 식별 가능해야 한다.
- 인스턴스의 집합이며, 두 개 이상 존재해야 한다.
- 하나 이상의 속성을 가진다.
- 다른 엔터티와 최소 한 개 이상의 관계가 있어야 한다.
📌 엔터티 분류
- 유형에 따른 분류
- 유형 엔터티: 물리적 형태 존재, 안정적 지속 사용 (예: 상품, 사원)
- 개념 엔터티: 물리적 형태 없는 개념적 정보 (예: 조직, 부서)
- 사건 엔터티: 업무 수행 중 발생, 통계 자료로 활용 (예: 주문, 신청)
- 발생 시점에 따른 분류
- 기본 엔터티: 업무에 원래 존재, 다른 엔터티의 부모 (예: 사원, 부서, 고객)
- 중심 엔터티: 기본 엔터티로부터 발생, 업무의 중심 (예: 계약, 주문)
- 행위 엔터티: 두 개 이상의 엔터티 관계/행위로 생성, 자주 변경 (예: 주문상세)
💡 발생 순서: 기본 → 중심 → 행위
2-2. 속성 (Attribute)
엔터티가 가지는 고유한 성질, 인스턴스를 구성하는 항목. 원칙적으로 하나의 속성은 하나의 값만 가짐(원자성).
- 특성에 따른 분류
- 기본속성: 업무로부터 자연스럽게 도출
- 설계속성: 모델링 과정에서 새로 정의 (예: 코드성 속성)
- 파생속성: 다른 속성으로부터 계산/유도 (예: 나이, 합계)
- 구성 방식에 따른 분류
- 단일값속성: 하나의 값만 가짐
- 복합속성: 여러 하위 속성으로 분리 가능 (예: 주소 → 시/구/동)
- 다중값속성: 여러 개의 값을 가짐 → 별도 엔터티로 분리 필요 (1NF 위반 방지)
- 역할에 따른 구분
- PK속성 / FK속성 / 일반속성
2-3. 관계 (Relationship)
엔터티 간의 연관성을 의미.
- 관계 성격:
- 존재적 관계: 엔터티가 존재함으로써 연관 (예: 부서 - 사원)
- 행위적 관계: 행위(트랜잭션)로 인해 발생 (예: 고객 - 주문)
- 관계의 3가지 표현 요소: ① 관계명 ② 관계 차수 (Cardinality: 1:1, 1:N, N:M) ③ 관계 선택사양 (필수/선택)
💡 N:M 관계는 물리 모델에서 그대로 구현할 수 없으므로 반드시 교차 엔터티(연결 엔터티)로 분해 (1:N + 1:N) 해야 함.
2-4. 식별자 (Identifier)
엔터티를 유일하게 구분할 수 있는 속성(들).
| 분류 기준 | 종류 | 설명 |
|---|---|---|
| 대표성 여부 | 주식별자 (PK) | 엔터티 대표, FK로 참조됨, Null 불가, Unique |
| 보조식별자 | 유일성은 있으나 대표성 없음, FK 참조 안 됨 | |
| 생성 방식 | 본질식별자 | 업무에서 자연적으로 발생 |
| 인조식별자 | 인위적으로 만든 대체 식별자 (예: 일련번호) | |
| 속성 수 | 단일식별자 / 복합식별자 | 속성 1개 vs 2개 이상 조합 |
📌 식별자 관계 vs 비식별자 관계
| 구분 | 식별자 관계 (Identifying) | 비식별자 관계 (Non-Identifying) |
|---|---|---|
| 상속받은 FK의 위치 | 자식의 PK 일부로 사용 | 자식의 일반 속성으로 사용 |
| 표기법 | 실선 | 점선 |
| 의미 | 부모 없이 자식 존재 불가 (강한 종속) | 자식이 독립적으로 존재 가능 (약한 종속) |
2-5. 슈퍼타입 / 서브타입 ⭐ (매우 중요)
공통 속성은 상위(슈퍼타입), 차이나는 속성은 하위(서브타입)로 나누어 모델링.
- 슈퍼타입: 공통 속성/관계를 가진 상위 엔터티 (예: 사원)
- 서브타입: 고유 속성을 추가로 가지는 하위 엔터티 (예: 정규직, 계약직)
📌 물리모델 변환 3가지 방식
| 방식 | 설명 | 특징 |
|---|---|---|
| One To One Type (개별 타입) | 슈퍼 + 서브를 각각 별도 테이블로 생성 | JOIN 필요, 확장/변경 유연, 무결성 고 |
| Plus Type (서브타입 타입) | 슈퍼타입 속성을 각 서브타입 테이블에 포함 | 서브타입 수만큼 테이블 생성, 전체 조회 시 UNION 필요 |
| Single Type (통합 타입) | 슈퍼 + 서브를 하나의 테이블로 통합 | 테이블 1개, JOIN 없어 조회 성능 우수, 구분 컬럼 필요, Null 발생 증가 |
💡 선택 기준: 조회 성능 중요 → Single Type / 무결성 및 확장성 중요 → One To One Type
2-6. 자기 참조 관계 (재귀 관계)
하나의 엔터티가 자기 자신과 관계를 맺는 경우.
- 예시: 사원 - 관리자(상사도 사원), 게시글 - 대댓글, 조직도(계층 구조)
- SQL 구현: 계층형 질의(
CONNECT BY또는 Recursive CTE)로 조회
2-7. NULL 속성의 특성
NULL은 “값이 없음 / 모름 / 미정” 을 의미하며0이나공백(Space)과는 명확히 다름.- 주식별자(PK)를 구성하는 속성은
NULL을 가질 수 없음 (개체 무결성 제약조건). NULL과의 연산/비교 결과는 항상UNKNOWN(알 수 없음)이 됨.
💡 NULL의 연산
단일행일경우, NULL
다중행일경우, 계산 제외
2-8. 이력관리 (History Management)
엔터티의 데이터가 시간에 따라 변경되는 이력을 관리하는 기법. 변경 이전 값을 보존해야 할 때 사용.
| 방식 | 설명 |
|---|---|
| 일자/시점 관리 | 변경 시작일자·종료일자 컬럼으로 유효기간 관리 |
| 트랜잭션(발생) 이력 | 변경/발생 건마다 새로운 행을 추가 (전체 이력 보존) |
💡 이력관리 엔터티는 보통 일자/시간 컬럼이 PK의 일부로 포함됨 (예: 사번 + 적용시작일자).
3. 모델 성능 최적화
3-1. 정규화 (Normalization)
데이터 중복 제거 및 이상현상(Anomaly) 방지를 위해 테이블을 분해하는 과정.
📌 이상현상 (Anomaly) 3가지
- 삽입 이상: 불필요한 데이터도 함께 입력해야 저장 가능
- 갱신 이상: 중복 데이터 중 일부만 수정되어 데이터 불일치 발생
- 삭제 이상: 데이터 삭제 시 저장되어야 할 다른 유용한 정보까지 함께 삭제됨
📌 정규화 단계
| 단계 | 조건 | 제거 대상 |
|---|---|---|
| 1NF | 모든 속성이 원자값(Atomic) 보유 | 다중값(반복) 속성 제거 |
| 2NF | 1NF + 완전 함수 종속 만족 | 부분 함수 종속 제거 (복합PK 일부에만 종속된 속성 분리) |
| 3NF | 2NF + 이행 함수 종속 제거 | 이행 함수 종속 제거 (A → B → C 관계에서 A → C 분리) |
| BCNF | 3NF + 모든 결정자가 후보키 | 결정자가 후보키가 아닌 함수 종속 제거 |
💡 암기 팁:
1NF: 원자값→2NF: 부분종속 제거→3NF: 이행종속 제거→BCNF: 결정자=후보키
3-2. 반정규화 (De-normalization)
조회 성능 향상을 위해 의도적으로 중복을 허용하거나 테이블/속성을 재구성하는 기법.
- 고려 상황: JOIN이 너무 잦아 성능 저하 발생 / 대량 데이터의 반복 처리 / 통계성 데이터의 자주 요구
- 구분:
- 테이블 반정규화: 테이블 병합(1:1, 1:N), 테이블 분할(수직/수평), 중복 테이블 추가
- 컬럼 반정규화: 중복 컬럼 추가, 파생 컬럼 추가, 이력테이블 컬럼 추가, PK에 의한 컬럼 추가
- 관계 반정규화: 중복 관계 추가 (JOIN 감소 목적)
💡 Trade-off: 정규화 = 데이터 무결성 ↑ / 반정규화 = 조회 성능 ↑ (단, 데이터 무결성저하 위험)
📌 1단계 최종 암기 요약
- 데이터 모델링 3단계: 개념적 → 논리적 → 물리적
- 3층 스키마: 외부 스키마 - 개념 스키마 - 내부 스키마
- 데이터 독립성: 논리적 독립성 (외부-개념) / 물리적 독립성 (개념-내부)
- 구성요소 4대장: 엔터티, 속성, 관계, 식별자
- 엔터티 발생시점 순서: 기본 엔터티 → 중심 엔터티 → 행위 엔터티
- 식별자 관계 vs 비식별자 관계: PK로 상속 (실선) vs 일반속성으로 상속 (점선)
- 슈퍼/서브타입 변환: One To One(개별) / Plus(서브타입) / Single(통합)
- 자기참조관계: 엔터티가 자기 자신과 관계 (조직도, 대댓글 등)
- NULL 속성: 0이나 공백과 다름 (
UNKNOWN), PK는 NULL 불가 - 이력관리: 일자(시점) 관리 / 트랜잭션(발생) 이력
- 정규화 순서: 1NF(원자값) → 2NF(부분종속 제거) → 3NF(이행종속 제거) → BCNF(결정자=후보키)
- 반정규화 목적: 조회 성능 향상 (트레이드오프: 무결성 저하 위험)
✏️ 예상 문제 (1단계 종합, 16문항)
Q1. 데이터 모델링 시 고려해야 할 유의점 3가지로 옳은 것은?
① 추상화, 단순화, 명확화
② 중복, 비유연성, 비일관성
③ 정규화, 반정규화, 통합화
④ 구조, 연산, 제약조건
Q2. 다음 중 데이터 모델링 진행 순서로 옳은 것은?
① 물리적 → 논리적 → 개념적
② 논리적 → 개념적 → 물리적
③ 개념적 → 논리적 → 물리적
④ 개념적 → 물리적 → 논리적
Q3. 3층 스키마 중 조직 전체의 통합된 데이터베이스 구조를 표현하며, 데이터베이스당 1개만 존재하는 스키마는?
Q4. DB 성능 향상을 위해 인덱스를 재구성하거나 파일 저장 구조 등 내부 스키마가 변경되어도 개념 스키마는 영향을 받지 않아야 한다는 데이터 독립성은 무엇인가?
Q5. 엔터티의 특징으로 옳지 않은 것은?
① 반드시 유일한 식별자로 식별 가능해야 한다.
② 하나의 인스턴스만 가져도 엔터티로 인정된다.
③ 하나 이상의 속성을 가져야 한다.
④ 다른 엔터티와 관계를 가질 수 있다.
Q6. 발생 시점에 따른 엔터티 분류 중, 두 개 이상의 엔터티로부터 발생하며 그 관계 속성에 의해 자주 생성되고 변경되는 엔터티는?
Q7. 하나의 속성이 여러 개의 값을 가지는 속성으로, 정규화 대상이 되어 별도의 엔터티로 분리해야 하는 속성은 무엇인가?
Q8. 식별자 관계(Identifying Relationship)에 대한 설명으로 옳은 것은?
① 부모 엔터티의 PK가 자식 엔터티의 일반 속성으로 상속된다.
② 부모 엔터티의 PK가 자식 엔터티의 PK 일부로 상속된다.
③ 관계선을 점선으로 표기한다.
④ 자식 엔터티가 부모 없이도 독립적으로 존재할 수 있다.
Q9. 테이블 R(학번, 과목명, 교수명)에서 기본키는 (학번, 과목명)이며 “과목명 → 교수명”이라는 함수 종속이 존재할 때(교수명이 기본키 전체가 아닌 과목명에만 종속), 이는 어떤 정규형 위반에 해당하는가?
① 1NF 위반
② 2NF 위반(부분 함수 종속)
③ 3NF 위반(이행 함수 종속)
④ BCNF 위반
Q10. 반정규화(De-normalization)를 수행하는 주된 목적과, 그로 인해 발생할 수 있는 단점은 무엇인가?
Q11. N:M(다대다) 관계를 물리 데이터 모델로 구현할 때 반드시 취해야 하는 조치는 무엇인가?
Q12. 슈퍼타입/서브타입을 물리 모델로 변환하는 방식 중, 슈퍼타입과 모든 서브타입의 속성을 하나의 테이블로 통합하여 JOIN 없이 조회할 수 있도록 하는 방식은?
① One To One Type
② Plus Type
③ Single Type
④ Multi Type
Q13. 사원 엔터티에서 “사원의 관리자도 사원이다”라는 관계를 표현하기 위해, 사원 엔터티가 자기 자신을 참조하도록 관계를 맺는 모델링 기법은 무엇인가?
Q14. NULL 값에 대한 설명으로 옳지 않은 것은?
① NULL은 값이 없거나 아직 정의되지 않았음을 의미한다.
② NULL은 숫자 0과 동일하게 취급된다.
③ 주식별자(PK)를 구성하는 속성은 NULL을 가질 수 없다.
④ NULL은 공백(Space)과 다른 개념이다.
Q15. 데이터 변경 시 이전 값을 보존하기 위해 변경 시작일자와 종료일자 컬럼을 두어 유효 기간을 관리하는 이력관리 방식은 무엇인가?
Q16. 다음 중 정규화 단계와 해소 대상의 연결이 잘못된 것은?
① 1NF - 다중값 속성 제거
② 2NF - 부분 함수 종속 제거
③ 3NF - 이행 함수 종속 제거
④ BCNF - 다중값 종속 제거
✅ 정답 및 해설
- Q1. 정답: ②
- 해설: 추상화·단순화·명확화는 모델링의 **“특징”**이고, 중복·비유연성·비일관성은 모델링 시 **“유의점(피해야 할 요소)“**입니다.
- Q2. 정답: ③
- 해설: 개념적 → 논리적 → 물리적 순서로 진행되며, 구체화될수록 DBMS 종속적인 모델이 됩니다.
- Q3. 정답: 개념 스키마 (Conceptual Schema)
- 해설: 외부 스키마는 사용자 관점으로 여러 개 존재 가능하지만, 개념 스키마는 데이터베이스 전체 구조를 나타내므로 단 1개만 존재합니다.
- Q4. 정답: 물리적 독립성
- 해설: 물리적 구조(내부 스키마)가 바뀌어도 개념 스키마에 영향을 주지 않는 것을 물리적 독립성이라 합니다. (개념-내부 사상 관련)
- Q5. 정답: ②
- 해설: 엔터티는 2개 이상의 인스턴스 집합이어야 합니다. 인스턴스가 1개뿐이면 엔터티로 부적절합니다.
- Q6. 정답: 행위 엔터티 (Active Entity)
- 해설: 기본 엔터티(독립적 발생) → 중심 엔터티(업무의 핵심) → 행위 엔터티(두 개 이상 관계에 의해 자주 발생/변경, 예: 주문상세)
- Q7. 정답: 다중값 속성 (Multi-valued Attribute)
- 해설: 하나의 속성에 여러 값이 들어가는 다중값 속성은 제1정규형(1NF) 위반이 되므로 별도의 엔터티로 분리해야 합니다.
- Q8. 정답: ②
- 해설: 식별자 관계는 부모의 PK가 자식의 PK 일부로 상속되며(실선), 자식은 부모 없이는 존재할 수 없는 강한 종속 관계입니다. ①, ③, ④는 비식별자 관계 설명입니다.
- Q9. 정답: ②
- 해설: 복합 기본키
(학번, 과목명)중 일부인과목명에만교수명이 종속되는 현상은 부분 함수 종속이며, 이는 2NF 위반입니다.
- 해설: 복합 기본키
- Q10. 정답:
- 목적: 데이터 조회(SELECT) 성능 향상 및 시스템 처리 속도 개선
- 단점: 데이터 중복 저장으로 인한 데이터 무결성 저하 및 갱신 이상(Anomaly) 발생 위험 증가
- Q11. 정답:
- 교차 엔터티(연결 엔터티) 생성: N:M 관계는 RDB에서 직접 구현할 수 없으므로, 두 엔터티의 PK를 상속받는 교차 엔터티를 생성하여 1:N, 1:N 관계 2개로 분해합니다.
- Q12. 정답: ③
- 해설: **Single Type(통합 타입)**은 슈퍼타입과 서브타입의 속성을 하나의 테이블로 통합하여 JOIN 없이 빠른 조회가 가능하지만, 서브타입별 불필요한 컬럼에 NULL 값이 많이 발생합니다.
- Q13. 정답: 자기 참조 관계 (Self-Referencing Relationship / 재귀 관계)
- 해설: 동일한 엔터티 내의 인스턴스 간 계층 관계를 표현할 때 사용하며, SQL에서는
CONNECT BY등 계층형 질의로 다룹니다.
- 해설: 동일한 엔터티 내의 인스턴스 간 계층 관계를 표현할 때 사용하며, SQL에서는
- Q14. 정답: ②
- 해설:
NULL은 숫자0이나공백(Space)과 완전히 다른 “알 수 없음(Unknown)” 상태입니다.
- 해설:
- Q15. 정답: 일자(시점) 관리 방식
- 해설: 변경 시작일자와 종료일자를 두어 유효 기간 단위로 이력을 관리하는 기법입니다.
- Q16. 정답: ④
- 해설: BCNF는 **“모든 결정자가 후보키인 정규형(결정자가 후보키가 아닌 함수 종속 제거)“**입니다. 다중값 종속(MVD) 제거는 제4정규형(4NF)에 해당합니다.