데이터베이스 정규화에 대해 설명해주세요.

면접용 답변

데이터베이스 정규화는 데이터의 중복을 최소화하고 무결성을 유지하기 위해 테이블을 구조화하는 과정입니다. 정규화를 통해 삽입, 삭제, 갱신 시 발생할 수 있는 이상 현상을 방지하고, 데이터베이스의 일관성을 유지할 수 있습니다.

정규화는 여러 단계로 나뉘며, 일반적으로 제1정규형, 제2정규형, 제3정규형, BCNF까지 적용합니다. 먼저, 제1정규형에서는 테이블의 모든 속성이 원자값을 가지도록 만들어 중복을 방지합니다. 제2정규형에서는 기본키의 부분 함수 종속성을 제거해 정규화하고, 제3정규형에서는 이행 종속성을 제거합니다. 마지막으로, BCNF에서는 후보키가 아닌 결정자를 제거해 데이터 무결성을 강화합니다.

개념설명

정규화(Normalization)란?

  • 데이터 중복을 줄이고 무결성을 유지하기 위해 테이블을 구조화하는 과정

  • 이를 통해 삽입, 삭제, 갱신 이상을 방지하고, 데이터베이스의 일관성을 유지 가능

정규화의 목표

  • 데이터 중복 제거: 동일한 데이터가 여러 테이블에 존재하는 것을 방지

  • 데이터 무결성 유지: 데이터가 일관성을 가지도록 설계

  • 이상(Anomaly) 방지: 삽입, 삭제, 갱신 시 발생하는 이상 현상 제거

  • 데이터베이스 구조 최적화: 스토리지 효율성을 증가시키고 유지보수성을 높임

정규화 과정

제1정규형

  • 모든 속성이 원자값을 가지도록 함

  • 즉, 한 컬럼에는 하나의 값만 존재해야 함

제1정규화 적용 전

학번
학생명
수강과목

1001

홍길동

데이터베이스, 운영체제

1002

이영희

컴퓨터네트워크

문제) 한 컬럼에 여러 개의 값이 들어가 있음

제1정규화 적용 후

학번
학생명
수강과목

1001

홍길동

데이터베이스

1001

홍길동

운영체제

1002

이영희

컴퓨터네트워크

제2정규형

  • 제1정규형을 만족하면서, 부분 함수 종속 제거

  • 즉, 테이블의 모든 컬럼이 기본키 전체에 완전 종속되도록 함

제2정규화 적용 전

학번
학생명
수강과목
교수명

1001

홍길동

데이터베이스

김교수

1001

홍길동

운영체제

이교수

문제) 학생명학번에만 종속, 교수명수강과목에 종속 (부분 함수 종속 발생)

제2정규화 적용 후 (테이블 분리)

학생 테이블

학번
학생명

1001

홍길동

1002

이영희

수강 테이블

학번
수강과목
교수명

1001

데이터베이스

김교수

1001

운영체제

이교수

제3정규형

  • 제2정규형을 만족하면서 이행적 종속 제거

  • 즉, 기본키가 아닌 속성이 다른 기본키가 아닌 속성에 종속되지 않도록 함

제3정규화 적용 전

학번
학생명
학과코드
학과명

1001

홍길동

CS01

컴퓨터공학과

1002

이영희

EE02

전자공학과

문제) 학과명학과코드에 의해 결정됨 → 이행적 종속 발생

제3정규화 적용 후 (학과 테이블 분리)

학생 테이블

학번
학생명
학과코드

1001

홍길동

CS01

1002

이영희

EE02

학과 테이블

학과코드
학과명

CS01

컴퓨터공학과

EE02

전자공학과

BCNF

  • 제3정규형을 만족하면서, 후보키가 아닌 결정자 제거

  • 즉, 모든 결정자가 후보키가 되도록 보장

BCNF 적용 전

교수명
연구실
학과

김교수

101호

컴퓨터공학과

이교수

102호

전자공학과

문제) 교수명연구실을 결정하지만, 교수명이 후보키가 아님

BCNF 적용 후 (테이블 분리)

교수 테이블

교수ID
교수명

P001

김교수

P002

이교수

연구실 테이블

연구실
학과

101호

컴퓨터공학과

102호

전자공학과

꼬리 질문

  • 정규화를 하면 얻을 수 있는 장점에 대해 설명해주세요.

  • 정규화의 단점에 대해 설명해주세요.

  • 어떠한 상황에 정규화를 하는 것이 좋은지, 그리고 단점에 대한 해결책에 대해 설명해주세요.

Last updated