IT 지식 (기술면접 대비)

정규화(Normalization)란

KoesJin 2025. 4. 30. 10:04

⭐️ 정규화란 ?

정규화란 어떤 대상을 일정한 규칙이나 기준에 맞게 변환하거나, 비정상적인 상태를 정상적인 상태로 만드는것이다.

 

🧐 그럼 데이터베이스에선 정규화를 사용하는 이유가 무엇일까 ? 

 

데이터베이스에서 정규화의 목적은 "테이블 간에 중복된 데이터를 허용하지 않는다"는 것이다.

 

중복된 데이터를 허용하지 않음으로써 무결성을 유지할 수 있으며, DB의 저장 용량 역시 줄일 수 있다.

* 무결성 : 데이터 또는 정보가 손상되거나 변형되지 않고 정확하게 유지되는 것

 

데이터베이스에선 이러한 테이블을 분해하여 정규화를 시킬 수 있는 방법을 제공하는데, 테이블이 어떻게

분해되는지에 따라 정규화 단계가 달라지는데, 각각의 정규화 단계에 대해서 알아보겠다.

 


 

⭐️ 제1정규형 (1NF: First Normal Form)

🔥 조건 및 설명

  • 모든 컬럼은 원자값(Atomic Value)를 가져야 함.
  • 컬럼 값에 중첩되거나 반복되는 값이 있으면 안됨
  • 한 셀에는 하나의 값만 있어야 하며, 리스트나 쉼표로 구분된 값이 들어가면 안됨

즉, 테이블이 스프레드시트처럼 각 셀에 하나의 정보만 담고 있어야 한다는 개념이다.

 

[ 정규화 전 테이블 ]

이름 나이 수강과목
홍길동 20 C, C++
이순신 21 Java
이산 22 DB , 운영체제

 

 

[ 제1 정규화 후 ]

이름 나이 수강과목
홍길동 20 C
홍길동 20 C++
이순신 21 Java
이산 22 DB
이산 22 운영체제

 

→ 한 행의 컬럼이 하나의 값만 갖도록 정규화 완료

 


 

⭐️ 제2정규형 (2NF: Second Normal Form)

🔥 조건 및 설명

  • 1NF를 만족해야함
  • 테이블의 모든 속성이 기본키 전체에 대해 완전 함수 종속되어야 함
  • 즉, 기본키의 일부만 가지고 특정 컬럼이 결정되지 않아야 함 -> 부분 함수 종속이 되지 않아야함.

완전 함수 종속 : 기본키 전체로만 어떤 속성이 결정되는 경우

부분 함수 종속 : 기본키가 2개 이상인데, 그중 일부만으로 어떤 속성이 결정된는경우

 

복합키를 사용하는 테이블에서 주로 발생하는 문제로, 기본키 일부에만 의존하는 컬럼이 있으면 분리해야 한다.

 

[ 예시 : 1NF 테이블 ]

이름 나이 수강과목
홍길동 20 C
홍길동 20 C++
이순신 21 Java
이산 22 DB
이산 22 운영체제

 

  • 기본키 후보 : (이름,수강과목)
  • 수강과목 또는 이름만 알아도 나이를 알 수 있음 → 부분 종속 발생

 

[ 2NF 분해 ]

 

1. 수강 테이블

이름 수강과목
홍길동 C
홍길동 C++
이순신 Java
이산 DB
이산 운영체제

 

2. 인물 테이블

이름 나이
홍길동 20
이순신 21
이산 22

 

→ 2정규화를 통해 각 테이블이 완전 함수 종속만 갖도록 만듦.

 


 

⭐️ 제3정규형 (3NF: Third Normal Form)

🔥 조건 및 설명

  • 2NF를 만족해야 함
  • 이행적 종속이 없어야 함
  • 즉, 기본키가 아닌 컬럼이 다른 컬럼에 의해 결정되면 안 됨

 

어떤 컬럼이 기본키가 아닌 다른 컬럼을 통해 간접적으로 결정된다면, 그 관계는 분리해야 한다.

 

[ 예시 : 2NF 상태에서 확장  -> 예시를 위해 2정규형을 어기면서 3정규형을 보여줌 -

2정규형을 하면 3정규형도 만족하는 경우가 많기떄문]

이름 수강과목 과목유형
홍길동 C 언어
홍길동 C++ 언어
이순신 Java 언어
이산 DB 데이터베이스
이산 운영체제 시스템
  • 과목유형 수강과목에 의해 결정됨 
  • 이름 수강과목을 결정 → 이행적 종속 발생 (이름 → 수강과목 → 과목유형)    기본키 아닌 컬럼을 통해 간접 결정됨.

 

[ 3NF 분해 ]

 

1. 수강 테이블

이름 수강과목
홍길동 C
홍길동 C++
이순신 Java
이산 DB
이산 운영체제

 

2. 과목유형 테이블

수강과목 과목유형
C 언어
C++ 언어
Java 언어
DB 데이터베이스
운영체제 시스템

 

→ 3정규화를 통해 각 테이블의 이행적 종속을 제거 하였다.

 

 

 


 

✅ BCNF (Boyce-Codd Normal Form)

✅ 조건 및 설명

  • 3NF를 만족해야 함
  • 모든 결정자가 후보키여야 함
  • 즉, 후보키가 아닌 컬럼이 결정자가 되면 안 됨

결정자(어떤 값을 결정하는 열)가 후보키가 아니면, 설계상 문제가 될 수 있어 분해가 필요합니다.

🔍 예시

수강과목 강의실 교수명
C 101호 홍길동
C++ 101호 홍길동
Java 102호 이순신
  • 강의실  교수명 (결정자)
  • 하지만 강의실 후보키가 아님 → BCNF 위반

✅ BCNF 분해

1. 강의실 테이블

강의실 교수명
101호 홍길동
102호 이순신

2. 과목-강의실 테이블

수강과목 강의실
C 101호
C++ 101호
Java 102호