wooing

정규화와 반정규화(비정규화)란? 본문

CS

정규화와 반정규화(비정규화)란?

우잉_ 2025. 3. 17. 16:52

정규화란?

정규화는 데이터 중복을 제거하고, 효율성을 향상시키며, 데이터 무결성을 보장하기 위해 릴레이션을 분리하는 행위를 말한다.

 

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

정규화에 대해 설명하기 전, 함수적 종속성에 대해 알아야한다. 함수적 종속성이란 어떤 릴레이션에서 속성의 부분집합을 X와 Y라고 할때, X의 값에 의해 Y값이 달라지는것을 Y는 X에 함수적 종속 이라고 한다. X->Y 형태로 나타낼 수 있으며, X를 결정자, Y를 종속자 라고 한다

여담으로, 정규화 내용으로 스터디를 진행하던 중, 함수적 종속성에서 결정자의 정의에 대해 논의한 적이 있다. 공부를 위해 다른 블로그를 참고해보면 결정자 설명에 기본키, 후보키 등의 키와 관련된 명칭이 자주 쓰여 혼란을 야기했다. 키 라고 설명하는 경우, 유일성과 최소성 제약으로 인해 개념이 많이 혼동되기때문에 명확히 해야한다. 결론적으로 결정자의 정의는 다음과 같다. 

"릴레이션에서 다른 애트리뷰트(속성)를 고유하게 결정하는 하나 이상의 애트리뷰트"
논의하며 기록한 내용 중 일부

1) 완전 함수적 종속

  • X -> Y일때, X의 전체가 Y를 결정하는 경우

2) 부분 함수적 종속

  • X -> Y일때, X의 일부만으로도 Y가 결정되는 경우

3) 이행적 종속

  • X -> Y, Y -> Z 일때, X -> Z 도 성립하는 경우

정규화 종류

일반적으로는 BCNF정규화까지 한다고 하며, 정보처리기사(기능사)에서 이를 외우기 위해 아래와 같이 암기한다.
도->부->이->결
->다->조

1) 1NF (제1 정규화)

속성의 값이 더 이상 나눌 수 없는 원자값이어야 함. 단일 값인 형태

아래의 표의 2, 3번 튜플의 속성처럼 한 속성에 여러 값을 가진 형태를 나누는 것을 1 정규형이라고 한다.

X Y
1 한국
2 한국, 일본
3 일본, 중국

2) 2NF (제2 정규화)

부분 함수적 종속을 제거한 형태. 결정자 (X)를 분리한다.

아래와 같은 구조에서 (학생번호, 강좌이름) -> 성적, 강좌이름 -> 강의실의 종속을 가진다. 이러한 형태는 결정자 X인 (학생번호, 강좌이름)의 일부인 강좌이름인 강의실을 결정하기 때문에 부분 함수적 종속이 존재한다고 할 수 있다.

학생번호 강좌이름 강의실 성적
101 DB 401 A
102 DB 401 B
103 알고리즘 402 A
104 컴퓨터구조 403 A
101 컴퓨터구조 403 B

이를 제거한 형태는 아래처럼 수강 테이블, 강의실 테이블로 분해할 수 있다.

학생번호 강좌이름 성적
101 DB A
102 DB B
103 알고리즘 A
104 컴퓨터구조 A
101 컴퓨터구조 B
강좌이름 강의실
DB 401
알고리즘 402
컴퓨터구조 403

 

3) 3NF (제3 정규화)

이행적 종속을 제거한 형태. 기본 키 이외의 컬럼 간 종속성이 없어야 함. 아래 표에서 학생번호 -> 강좌이름 -> 수강료 구조가 이행적 종속이다. 예시를 위해 테이블 안의 값에 학생번호의 중복은 없다고 가정한다.

학생번호 강좌이름 수강료
101 DB 10000
102 DB 10000
103 알고리즘 20000
104 알고리즘 20000

이를 분해하면 (학생번호 - 강좌이름)의 수강 테이블과 (강좌이름 - 수강료)의 수강료 테이블로 분해된다.

4) BCNF (보이스 코드 정규화)

모든 결정자가 후보키가 되어야 함. 아래의 예시는 (학생번호, 특강이름)을 기본키이다. 이때 (학생번호, 특강이름) -> 교수 형태이지만, 교수 -> 특강의 함수 종속성이 생긴다. 교수 속성은 중복이 발생할 수 있는 후보키가 아닌 속성이므로 이를 분리하는 과정이 보이스 코드 정규화 이다.

학생번호 특강이름 교수
101 DB 김김김
101 알고리즘 이이이
102 DB 김김김

이를 분해하면 (학생번호 - 교수), (특강이름 - 교수)형태로 분리가 가능하다.

5) 4NF (제4 정규화)

다치 종속이 없어야 한다. 

다치 종속이란?

  • X -> Y 일때 하나의 X값에 여러 개의 B 값이 존재하는 경우를 말한다.

6) 5NF (제5 정규화)

조인 종속이 없어야 한다. 하나의 릴레이션을 여러 개의 릴레이션으로 무손실 분해 했다가 다시 결합할 수 있는 형태를 말한다.

 

반정규화(비정규화)란?

데이터 조인으로 인한 성능 저하가 예상될때, 의도적으로 정규화를 위반하는 행위를 말한다.

반정규화의 종류

  • 테이블 병합
  • 테이블 분할
    • 수직 분할
    • 수평 분할
  • 테이블 추가
    • 중복 테이블
    • 통계 테이블
    • 이력 테이블
    • 부분 테이블
  • 컬럼 중복화

'CS' 카테고리의 다른 글

[JAVA] 배열(Array) 개념과 util.Arrays사용방법 정리  (0) 2025.03.21
OSI 7계층과 계층별 역할  (1) 2025.01.19
JWT와 사용 전략  (0) 2024.08.27
[자료구조] AVL트리 [JAVA]  (0) 2020.08.30
[자료구조] 트리  (0) 2020.07.20