ER 다이어그램 표기법과 함수적 종속성을 이해하고 1NF~BCNF 정규화 단계를 예제로 완전히 수행하며 반정규화 전략도 정리합니다.
📐 ER 다이어그램 표기법
이 섹션에서는 데이터베이스 설계의 출발점인 ER(Entity-Relationship) 다이어그램의 표기법과 구성 요소를 살펴보겠습니다.
ER 다이어그램은 Peter Chen이 1976년 제안한 개념적 데이터 모델링 도구입니다. 현실 세계의 데이터를 개체, 속성, 관계로 표현합니다.
| 구성 요소 | 표기 기호 | 설명 |
|---|---|---|
| 개체(Entity) | 사각형(□) | 독립적으로 존재하는 데이터 단위 (학생, 과목, 교수) |
| 속성(Attribute) | 타원(○) | 개체의 특성 (학번, 이름, 나이) |
| 관계(Relationship) | 마름모(◇) | 개체 간의 연관성 (수강, 담당) |
| 기본키 속성 | 밑줄 타원 | 개체를 유일하게 식별하는 속성 |
| 다중값 속성 | 이중 타원 | 여러 값을 가질 수 있는 속성 (전화번호 여러 개) |
| 파생 속성 | 점선 타원 | 다른 속성으로부터 계산되는 속성 (나이←생년월일) |
카디날리티(Cardinality)는 관계에 참여하는 개체의 수를 나타냅니다. 1:1(교수-연구실), 1:N(교수-학생, 한 교수가 여러 학생 지도), N:M(학생-과목, 여러 학생이 여러 과목 수강)으로 표현합니다.
참여도(Participation)는 개체가 관계에 반드시 참여해야 하는지를 나타냅니다. 전체 참여(이중선, 필수)와 부분 참여(단일선, 선택)로 구분됩니다.
기출 함정: "속성은 마름모로 표시한다" → 틀림. 속성은 타원, 관계는 마름모입니다. "1:N 관계에서 N쪽이 외래키를 가진다" → 맞음. 이것이 핵심 설계 원칙입니다.
🔗 함수적 종속성의 3가지 유형
이 섹션에서는 정규화의 이론적 기반인 함수적 종속성의 세 가지 유형을 살펴보겠습니다.
함수적 종속성(Functional Dependency)이란 속성 X의 값이 결정되면 속성 Y의 값이 유일하게 결정될 때, "Y는 X에 함수적으로 종속된다(X→Y)"고 합니다. 학번→이름, 학번→학과 관계가 그 예입니다.
| 종속성 유형 | 정의 | 예시 |
|---|---|---|
| 완전 함수 종속 | 기본키 전체에 종속, 일부에는 종속 안 됨 | (학번, 과목코드)→성적 — 두 속성 모두 필요 |
| 부분 함수 종속 | 기본키의 일부에 종속 | (학번, 과목코드)→학생이름 — 학번만으로 결정됨 |
| 이행 함수 종속 | X→Y, Y→Z일 때 X→Z 성립 | 학번→학과코드, 학과코드→학과명 → 학번→학과명 |
암기법: "완부이 — 완전·부분·이행". 완전은 기본키 전체, 부분은 기본키 일부, 이행은 연쇄 종속입니다. 정규화는 이 세 가지 종속성 문제를 단계적으로 해결하는 과정입니다.
📊 정규화 1NF~BCNF 단계별 변환
이 섹션에서는 정규화의 각 단계를 구체적인 예제와 함께 살펴보겠습니다.
정규화는 데이터 중복과 이상현상(삽입 이상·삭제 이상·갱신 이상)을 제거하기 위해 릴레이션을 분해하는 과정입니다.
1NF (제1정규형): 모든 속성값이 원자값(Atomic Value)이어야 합니다. 즉, 하나의 셀에 여러 값이 있으면 안 됩니다. 예를 들어 전화번호 속성에 "010-1234, 02-5678"이 들어있으면 1NF 위반입니다. 해결: 행을 분리하거나 별도 테이블로 분리합니다.
2NF (제2정규형): 1NF를 만족하고, 모든 비기본키 속성이 기본키에 완전 함수 종속되어야 합니다. 부분 함수 종속을 제거합니다. 복합 기본키가 있을 때 기본키의 일부에만 종속되는 속성을 분리합니다.
3NF (제3정규형): 2NF를 만족하고, 기본키가 아닌 속성이 기본키에 직접 종속되어야 합니다. 이행 함수 종속을 제거합니다. 학번→학과코드→학과명 관계에서 학과명을 별도 테이블로 분리합니다.
BCNF (보이스-코드 정규형): 3NF를 만족하고, 모든 결정자가 후보키이어야 합니다. 3NF보다 엄격한 조건으로, 후보키가 아닌 속성이 결정자가 되는 경우를 제거합니다.
| 정규형 | 제거 대상 | 조건 |
|---|---|---|
| 1NF | 반복 그룹 | 원자값 |
| 2NF | 부분 함수 종속 | 완전 함수 종속 |
| 3NF | 이행 함수 종속 | 직접 종속만 |
| BCNF | 후보키 아닌 결정자 | 모든 결정자=후보키 |
암기법: "원완이후(원숭이 후)" — 1NF=원자값, 2NF=완전함수종속, 3NF=이행종속제거, BCNF=후보키=결정자.
🔄 반정규화의 유형과 트레이드오프
이 섹션에서는 성능 향상을 위해 의도적으로 정규화를 되돌리는 반정규화의 유형과 고려사항을 살펴보겠습니다.
반정규화(Denormalization)는 정규화된 테이블을 합치거나 중복 데이터를 허용하여 조회 성능을 향상시키는 기법입니다. 정규화는 데이터 무결성을 보장하지만 JOIN이 많아지면 성능이 저하될 수 있습니다. 반정규화는 이 트레이드오프를 의도적으로 선택하는 것입니다.
| 반정규화 유형 | 방법 | 효과 |
|---|---|---|
| 테이블 병합 | 자주 JOIN하는 두 테이블을 하나로 합침 | JOIN 비용 제거 |
| 테이블 분리 | 사용 빈도에 따라 열을 수직 분리 | 불필요한 열 로딩 감소 |
| 중복 열 추가 | 자주 조회하는 값을 복사하여 저장 | JOIN 없이 바로 조회 |
| 중복 테이블 추가 | 요약 테이블을 별도 생성 | 집계 쿼리 성능 향상 |
반정규화의 단점: 데이터 중복으로 저장 공간 증가, 데이터 불일치 위험(갱신 시 모든 복사본 수정 필요), DML 성능 저하(INSERT·UPDATE·DELETE 시 여러 곳 수정). 따라서 반정규화는 충분한 성능 분석 후 신중하게 적용해야 합니다.
기출 함정: "반정규화는 데이터 무결성을 향상시킨다" → 틀림. 반정규화는 무결성을 희생하고 성능을 얻는 것입니다. "정규화를 완벽히 하면 반드시 성능이 좋아진다" → 틀림. 지나친 정규화는 JOIN 증가로 성능 저하를 유발합니다.
📌 14강 핵심 요약과 15강 예고
이 섹션에서는 14강 핵심 내용을 압축 정리합니다.
ER 다이어그램: 개체=사각형, 속성=타원, 관계=마름모. 카디날리티: 1:1·1:N·N:M. N쪽이 외래키 보유. 함수적 종속성: 완전(기본키 전체)·부분(기본키 일부)·이행(연쇄).
정규화: "원완이후" — 1NF=원자값, 2NF=완전함수종속(부분 제거), 3NF=이행종속 제거, BCNF=모든결정자=후보키. 반정규화: 테이블병합·분리·중복열추가·중복테이블추가 — 성능↑ 무결성↓ 트레이드오프.
다음 15강에서는 병행 제어·회복과 NoSQL — 2단계 로킹 프로토콜, UNDO/REDO 로그 기반 회복, CAP 정리, NoSQL 4분류를 완벽히 정리합니다.
관련 주제
- ER 다이어그램 표기법
- 카디널리티 참여도
- 함수적 종속성
- 1NF 2NF 3NF BCNF
- 정규화 단계별 변환
- 반정규화 유형
- 자격증
- 자격증 강의
- 정보처리기사 필기 25강 — 핵심이론·기출 완전정복
- 무료강의
- 무료 온라인 강의
- NUGUNA
- 누구나
📚 시리즈 전체 공유
정보처리기사 필기 25강 — 핵심이론·기출 완전정복
이 강의가 속한 시리즈는 총 16강, 모두 무료입니다. 처음부터 배우려는 동료에게 시리즈 전체를 알려 주세요.
댓글
불러오는 중...
