DataBase Normalization

SongWoo Yu·2025년 1월 21일
0

DataBase(이하 DB)에서 정규화(Normallization)란 이상현상이 있는 릴레이션(Relation)을 분해하여 이상현상을 없애는 과정을 말한다. 일단 용어 정리가 어느정도 선행되어야 정규화에 대해 알 수 있을 듯 하다. DB는 무엇인가 간단히 말하면 전자적으로 저장되고 체계적인 데이터의 모음이라고 한다. DB의 종류에는 계층형, 네트워크형, 관계형, 객체지향 DB 등 다양한 분류와 분류법이 존재한다. 오늘은 관계형에 대하여 대강 짚고 넘어가려고 한다. 관계형 DB는 행과 열을 가지는 표 형식의 데이터가 저장되는 형태의 DB를 말한다. 오늘 알아볼 정규화는 이상현상이 있는 '릴레이션'을 분해한다고 했다. 릴레이션은 무엇일까? 관계형 DB에서 정보를 구분하여 저장하는 기본 단위를 말한다. 즉 관계형으로 저장된 DB의 테이블 단위인 것이다.

우리는 정규화를 통해 이상현상을 제거하고 새로운 데이터 형의 추가(확장) 시 구조 변경이 용이해지는 장점을 가지게 된다. 이를 통해 테이블 구성이 논리적이고 직관적으로 변할 수도 있다. 또한 연동된 응용 프로그램에 최소한의 영향을 미치게 되어 프로그램의 생명을 연장시킬 수 있다는 점에서도 특징이 있다. 중복 속성을 제거하고 결정자에 의한 동일한 의미의 속성이 하나의 테이블로 직약되기에 테이블의 데이터 용량이 최소화되는 효과도 있다. 그러나 릴레이션의 분해로 Join연산이 많아지고, 질의 응답 시간이 느려질 수 있다는 단점도 존재한다. 따라서 데이터 처리 속도가 빨라질 수도, 느려질 수도 있기에 테이블을 잘 확인하고 정규화를 진행할 필요가 있다. join이 너무 많이 발생한다며 반정규화를 적용하여 처리 속도를 줄여야 한다.

그렇다면 정규화의 목표인 무결성은 어떻게 유지시킬 수 있을까? 테이블 간 중복 데이터를 줄이는 방식으로 DB 저장 용량을 줄이는 방향으로 진행된다. 이러한 정규화는 1~3단계 +a의 단계로 진행된다.

<제1 정규화> Atomic Value
테이블의 컬럼이 원자값(하나의 값)을 갖도록 테이블을 분해하는 것
규정은 1) 각 칼럼이 하나의 속성을 가져야 한다. 2) 하나의 컬럼은 같은 종류나 타입의 값을 가져야 한다. 3) 각 컬럼이 Unique(유일)한 이름을 가져야 한다. 4) 칼럼의 순서가 상관 없어야 한다.

<제2 정규화>
제1정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블 분해하는 것
기본키의 부분 집합이 결정자가 되어선 안됨(테이블에서 기본키가 복합키로 묶여있는 경우, 두 키 중 하나만으로 다른 컬럼을 결정지을 수 있으면 안 된다는 것)
규정은 1) 제1 정규형을 만족 2) 모든 컬럼이 완전 함수 종속을 만족

<제3 정규화>
제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것을 의미함
이행적 종속은 A -> B, B -> C가 성립할 때, A -> C가 성립하는 것을 의미함(간단히 3단 논법)
규정 1) 제2 정규형 만족 2) 기본키 제외한 속성들 간의 이행 종속성 없어야 함(기본키가 아닌 속성들은 기본키에 의존해야 함)

<BCNF(Boyce-Codd Normal Form)>
제3 정규형을 좀 더 강화한 버전으로 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
규정 (1) 제3 정규형 만족 (2) 모든 결정자가 후보키 집합에 속해야 함(후보키 집합에 없는 컬럼은 결정자가 될 수 없다.)

그 이상(단계)
정규화 되거나 되지 않은 모든 릴레이션
-> 1NF 릴레이션
-> 2NF
-> 3NF
->BCNF
->4NF
-> 5NF(PJ/NF)

그러나 너무 많은 단계를 거치게 되면 처음에 말한 부작용이 있으니, 적당한 단계의 정규화를 통해 DB를 구성해야 한다.

0개의 댓글