정규화(Normalization)란?

주현·2025년 1월 11일

CS

목록 보기
2/8

📌 정규화란?

정규화는 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정이다. 이상현상이 있는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다. 이를 단계별로 구분하여 정규형이 높아질 수록 이상현상이 줄어든다.

✔️ 이상현상이 뭘까?

  • 삽입 이상 : 튜플 삽입 시, 특정 속성에 해당하는 값이 없어 NULL을 입력해야하는 상황
  • 삭제 이상 : 튜플 삭제 시, 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
  • 갱신 이상 : 튜플 갱신 시, 중복된 데이터의 일부만 갱신되어 일어나는 데이터 불이치 현상

📍 정규화의 장점

  • 데이터베이스 변경 시 이상현상을 제거할 수 있다.
  • 정규화된 데이터베이스 구조에서 새로운 데이터 형의 추가로 인한 확장 시, 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
  • 데이터베이스와 연동된 응용 프로그램에 최소한의 영향만을 미치게 되어 응용프로그램의 생명을 연장시킨다.

📍 정규화의 단점

  • 릴레이션의 분해로 인해 릴레이션 간의 조인연산이 많아진다.
  • 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있다.
  • 만약 조인이 많이 발생하여 성능 저하가 나타나면 반정규화를 적용할 수도 있다.

제1 정규형 (1NF)

  1. 각 칼럼이 하나의 속성만을 가져야 한다.
  2. 하나의 칼럼은 같은 종류나 타입을 가져야 한다.
  3. 각 칼럼이 유일한(유니크)한 이름을 가져야함.
  4. 칼럼의 순서는 상관 없어야 한다.

예를 들면,

학생번호이름과목
101아이유운영체제,DB
102한지민자바
103한효주C,C++

위 도표에서
1. 각 칼럼이 하나의 속성만을 가져야 한다. -> 만족 x 하나의 칼럼에 두 개의 값을 가지고 있기 때문이다.
2. 하나의 칼럼은 같은 종류나 타입을 가져야 한다. -> 만족
3. 각 칼럼이 유일한(유니크)한 이름을 가져야함. -> 만족
4. 칼럼의 순서는 상관 없어야 한다. -> 만족

1번 규칙이 불만족하니 이를 고치게 된다면,

학생번호이름과목
101아이유운영체제
101아이유DB
102한지민자바
103한효주C
103한효주C++

위와 같이 각 칼럼이 원자 값을 갖도록 테이블을 분해하면 1 정규형을 만족하게 바꿀 수 있다.


제2 정규형 (2NF)

  • 1 정규형을 만족해야 한다.
  • 모든 칼럼이 부분적 종속이 없어야 한다. (모든 칼럼이 완전 함수 종족을 만족해야 한다.)

부분적 종속이라 하면 기본키 중에 특정 칼럼에만 종속되는 것이며,
완전 함수 종속은 기본키의 부분집합이 결정자가 되어선 안된다는 것이다.

학생번호과목지도교수성적
101운영체제정주현100
101DB심지혜40
102자바진명인50
103C위진영40
103C++조민정30

위와 같은 테이블이 있을때, 성적을 알기 위해선 학생번호+과목이 있어야한다.(101번학색의 운영체제 점수 100점)
하지만, 특정 과목의 지도교수는 과목명만 알게 되어도 지도교수명을 알 수 있게 된다.(운영체제의 지도 교수는 정주현)
위 테이블에선 기본키는 (학생번호+과목)이다.
그런데 이때 지도교수 칼럼은 (학생번호+과목)에 종속되는 것이 아닌, (과목)에만 종속이 되는 부분적 종속이다. 이는 제 2정규형을 만족하지 않기에 분해해야 한다.

학생번호과목성적
101운영체제100
101DB40
102자바50
103C40
103C++30

\

과목지도교수
운영체제정주현
DB심지혜
자바진명인
C위진영
C++조민정

위와 같이 분해를 하게된다면 제 2정규형은 맞게된다.


제3 정규형 (3NF)

  • 2 정규형을 만족해야 한다.
  • 기본키를 제외한 속성들 간의 이행 종속성이 없어야 한다.

이행 종속성이란 A->B, B->C일때 A->C가 성립할 시 이행 종속이라고 한다.


위 사진을 보면 ID를 알면 등급을 알 수 있다. 등급을 알면 할인율을 알 수 있다. 따라서 ID를 알면 할인율을 알 수 있다. 이행 종속성이 존재하므로 제 3 정규형을 만족하지 않는다.

ID등급
101Vip
102Gold
102Bronze

\

ID등급
Vip40%
Gold20%
Bronze10%

위와 같이 분해하면 제 3정규형을 만족한다.


BCNF

  • 3정규형을 만족해야 한다.
  • 모든 결정자가 후보키 집합에 속해야 한다.

모든 결정자가 후보키 집합에 속해야 한다는 뜻은, 후보키 집합에 없는 칼럼이 결정자가 되어선 안된다는 뜻이다 예를 들자

위와 같은 테이블을 보자. (학생 번호, 과목)이 기본키로 지도교수를 알 수 있다. 하지만 같은 과목을 다른 교수가 가르칠 수도 있어서 과목-> 지도교수 종속은 성립하지 않는다.
하지만 지도교수가 어떤 과목을 가르치는지는 알 수 있으므로 지도교수-> 과목 종속이 성립한다.

이처럼 후보키 집합이 아닌 칼럼이 결정자가 되어버린 상황을 BCNF를 만족하지 않는다고 한다.

BCNF를 만족하기 위해서는 아래와 같이 분해하면 된다.

학생번호지도교수
101김자바
101박플플
102오자바
103조씨샵
104김자바
지도교수과목
김자바자바
박플플C++
오자바자바
조씨샵C#

이렇게 하면 정규화가 완료된다.

4정규형 이상도 있으나, 그 이상 정규화하면 정규화의 단점이 나타날 수도 있다고 한다.ㅊ

0개의 댓글