Databasemedium면접 빈도: medium

정규화

정규화 (Normalization)

📝 개념 정의

데이터의 중복을 제거하고 데이터 무결성을 보장하기 위해 테이블을 분해하는 과정입니다.

핵심:

  • 결정자에 의한 함수적 종속성 기반
  • 입력/수정/삭제 이상 현상 제거
  • 데이터 용량 최소화

🎯 정규화의 목적

이상 현상 (Anomaly) 제거

삽입 이상 (Insertion Anomaly):

  • 불필요한 데이터를 함께 저장해야 함

갱신 이상 (Update Anomaly):

  • 중복 데이터 중 일부만 수정하여 불일치 발생

삭제 이상 (Deletion Anomaly):

  • 필요한 데이터까지 함께 삭제됨

정규화 효과

데이터 중복 최소화데이터 무결성 보장유연성 극대화 (High Cohesion & Loose Coupling) ✅ 저장 공간 절약


📚 핵심 용어

함수적 종속성 (Functional Dependency, FD)

정의:

  • 컬럼 A의 값을 알면 컬럼 B의 값을 알 수 있을 때
  • 컬럼 B는 컬럼 A에 함수적 종속성이 있음

표기: A → B

예시:

  • 학번 → 학생 이름
  • 주민등록번호 → 생년월일

결정자 (Determinant)

함수적 종속성에서 값을 결정하는 컬럼 (A → B에서 A)

다치 종속 (Multi-Valued Dependency, MVD)

결정자 A에 의해 컬럼 B의 값을 여러 개 알 수 있을 때


🔢 정규화 단계

제1정규형 (1NF)

규칙: 모든 속성은 원자 값을 가져야 함

위반 사례

| 학번 | 이름 | 취미 | |------|------|------| | 1001 | 주디 | 독서, 영화, 운동 |

문제: 취미 컬럼이 다중 값

해결

방법 1: Row 분리

| 학번 | 이름 | 취미 | |------|------|------| | 1001 | 주디 | 독서 | | 1001 | 주디 | 영화 | | 1001 | 주디 | 운동 |

방법 2: 테이블 분리

학생 테이블:

| 학번 | 이름 | |------|------| | 1001 | 주디 |

취미 테이블:

| 학번 | 취미 | |------|------| | 1001 | 독서 | | 1001 | 영화 | | 1001 | 운동 |


제2정규형 (2NF)

규칙: 1NF + 모든 Non-Key 컬럼은 기본 키 전체에 종속

부분 종속 제거 (Partial Dependency)

위반 사례

수강 테이블 (PK: 학번 + 과목코드):

| 학번 | 과목코드 | 학생이름 | 과목이름 | 성적 | |------|----------|----------|----------|------| | 1001 | CS101 | 주디 | 데이터베이스 | A |

문제:

  • 학생이름은 학번에만 종속 (부분 종속)
  • 과목이름은 과목코드에만 종속 (부분 종속)

해결

학생 테이블:

| 학번 | 학생이름 | |------|----------| | 1001 | 주디 |

과목 테이블:

| 과목코드 | 과목이름 | |----------|----------| | CS101 | 데이터베이스 |

수강 테이블:

| 학번 | 과목코드 | 성적 | |------|----------|------| | 1001 | CS101 | A |


제3정규형 (3NF)

규칙: 2NF + 이행적 종속 제거 (Transitive Dependency)

일반 속성 간 종속 관계 제거

위반 사례

학생 테이블 (PK: 학번):

| 학번 | 이름 | 학과코드 | 학과이름 | |------|------|----------|----------| | 1001 | 주디 | CS | 컴퓨터공학 |

문제:

  • 학번 → 학과코드 → 학과이름 (이행적 종속)
  • 학과이름은 학번이 아닌 학과코드에 종속

해결

학생 테이블:

| 학번 | 이름 | 학과코드 | |------|------|----------| | 1001 | 주디 | CS |

학과 테이블:

| 학과코드 | 학과이름 | |----------|----------| | CS | 컴퓨터공학 |


BCNF (Boyce-Codd Normal Form)

규칙: 3NF + 모든 결정자는 후보 키

결정자 중 후보 키가 아닌 것 제거

특징

  • 3NF보다 엄격
  • 실무에서 3NF까지만 적용하는 경우 많음

제4정규형 (4NF)

규칙: BCNF + 다치 종속 제거


제5정규형 (5NF)

규칙: 4NF + 조인 종속성 제거


📊 정규화 단계 요약

| 정규형 | 제거 대상 | 핵심 규칙 | |--------|-----------|-----------| | 1NF | 다중 값 | 원자 값만 허용 | | 2NF | 부분 종속 | 기본 키 전체에 종속 | | 3NF | 이행적 종속 | 일반 속성 간 종속 제거 | | BCNF | 결정자 | 모든 결정자는 후보 키 | | 4NF | 다치 종속 | MVD 제거 | | 5NF | 조인 종속 | Join Dependency 제거 |


⚖️ 정규화 vs 반정규화

정규화의 장단점

장점: ✅ 데이터 중복 최소화 ✅ 이상 현상 방지 ✅ 데이터 무결성 보장 ✅ 저장 공간 절약

단점: ❌ 조회 시 JOIN 증가 ❌ 복잡한 쿼리 ❌ 조회 성능 저하 가능

반정규화 (Denormalization)

목적:

  • 조회 성능 향상
  • JOIN 연산 감소

방법:

  • 테이블 통합
  • 중복 컬럼 추가
  • 파생 컬럼 추가

고려사항:

  • 데이터 일관성 관리 필요
  • 저장 공간 증가
  • INSERT/UPDATE 성능 저하

💡 실무 적용

일반적인 적용 수준

OLTP (Online Transaction Processing):

  • 3NF까지 적용
  • 데이터 무결성 중요
  • 예: 은행 시스템, 주문 시스템

OLAP (Online Analytical Processing):

  • 반정규화 적용
  • 조회 성능 중요
  • 예: 데이터 웨어하우스, BI 시스템

성능 고려사항

정규화 효과:

  • INSERT/UPDATE/DELETE 성능 향상
  • 조회 성능은 상황에 따라 다름

최적화 전략:

  • 적절한 정규화 수준 선택
  • 필요 시 부분적 반정규화
  • 인덱스 활용

❓ 면접 질문 예시

Q1. 정규화란 무엇이고 왜 필요한가요?

답변: 정규화는 데이터의 중복을 제거하고 데이터 무결성을 보장하기 위해 테이블을 분해하는 과정입니다. 삽입/갱신/삭제 이상 현상을 방지하고, 데이터 일관성을 유지하며, 저장 공간을 절약할 수 있습니다.

Q2. 제1, 2, 3정규형을 설명해주세요.

답변:

  • 1NF: 모든 속성이 원자 값을 가져야 합니다. 다중 값을 가진 컬럼을 분리합니다.
  • 2NF: 1NF + 부분 종속 제거. 모든 Non-Key 컬럼이 기본 키 전체에 종속되어야 합니다.
  • 3NF: 2NF + 이행적 종속 제거. 일반 속성 간 종속 관계를 제거합니다.

Q3. 함수적 종속성이란?

답변: 컬럼 A의 값을 알면 컬럼 B의 값을 알 수 있을 때, 컬럼 B는 컬럼 A에 함수적 종속성이 있다고 합니다. 예를 들어, 학번을 알면 학생 이름을 알 수 있으므로 학생 이름은 학번에 함수적 종속입니다.

Q4. 정규화의 단점과 반정규화를 하는 이유는?

답변: 정규화의 단점은 조회 시 여러 테이블을 JOIN해야 하므로 쿼리가 복잡해지고 조회 성능이 저하될 수 있습니다. 반정규화는 조회 성능을 향상시키기 위해 의도적으로 중복을 허용하는 것으로, OLAP 시스템이나 조회가 빈번한 경우에 사용합니다.

Q5. 실무에서 어느 정도까지 정규화를 적용하나요?

답변: 일반적으로 OLTP 시스템에서는 3NF까지 적용합니다. BCNF 이상은 너무 엄격하여 실무에서는 잘 사용하지 않습니다. OLAP 시스템이나 데이터 웨어하우스에서는 조회 성능을 위해 부분적으로 반정규화를 적용하기도 합니다.


📚 원본 참고 자료

출처: 2023-CS-Study

추가 학습 자료

⬅️이 문서를 참조하는 문서

이 개념을 기반으로 하는 고급 주제들입니다.