데이터 정규화(Normalization)
데이터 정규화란 무엇인가
데이터 정규화는 데이터베이스 설계 기법의 하나로, 데이터의 중복을 최소화하고 데이터 구조를 효율적으로 만들어 데이터의 무결성과 일관성을 유지하기 위해 수행됩니다.
이 과정은 여러 단계의 '정규형'을 거쳐 데이터를 구조화합니다. 각 단계는 특정한 조건을 충적시키며 일반적으로 높은 단계의 정규형으로 갈수록 더 엄격한 조건을 만족시키게 됩니다.
제1정규화
제1정규화는 테이블의 모든 컬럼이 원자값을 가지도록 하는 것입니다.
- 각 컬럼에는 반복되는 그룹이나 리스트가 없어야 함
- 각 컬럼 값은 단일 값으로 구성돼야 함
제1정규형 테이블
고객 테이블에서 고객의 취미를 나타내는 컬럼이 여러 취미를 한 컬럼에 담고 있는 경우를 예시로 들면 아래와 같습니다.
고객 ID | 이름 | 취미 |
1 | 김이름 | 등산, 낚시 |
2 | 박이름 | 독서 |
이 테이블을 제1정규형으로 만들기 위해 취미를 분리합니다.
고객 ID | 이름 | 취미 |
1 | 김이름 | 등산 |
1 | 김이름 | 낚시 |
2 | 박이름 | 독서 |
제2정규화
제2정규화는 제1정규형을 만족하는 테이블에 대해 모든 비주요 키 속성이 기본키에 완전 함수적 종속을 만족하도록 분해하는 과정입니다.
다시 말해, 부분적 종속을 제거하는 단계인 것입니다.
제2정규형 테이블
고객이 여러 주문을 할 수 있는 시스템에서 주문 테이블을 생각해보면 아래와 같습니다.
주문 ID | 고객 ID | 고객이름 | 주문날짜 | 제품 |
101 | 1 | 김이름 | 2050-01-01 | 카메라 |
102 | 1 | 김이름 | 2050-01-02 | 노트북 |
103 | 2 | 박이름 | 2050-01-02 | 마우스 |
위의 경우 고객이름은 고객 ID에만 종속적입니다. 이를 분해해서 제2정규형을 만듭니다.
주문테이블
주문 ID | 고객 ID | 주문날짜 | 제품 |
101 | 1 | 2050-01-01 | 카메라 |
102 | 1 | 2050-01-02 | 노트북 |
103 | 2 | 2050-01-02 | 마우스 |
고객테이블
고객 ID | 고객이름 |
1 | 김이름 |
2 | 박이름 |
제2정규화 장점
- 데이터 중복 감소
- 데이터 무결성 향상
- 쿼리 성능 개선
제2정규화 단점
- 조인 연산이 많아져 성능 저하 가능성 있음
- 테이블 구조가 복잡해져 설계와 유지보수의 복잡성을 높임
제3정규화
제3정규화는 제2정규형을 만족하는 테이블에 대해 모든 비주요 키 속성이 기본 키에 이행적으로 종속된 속성을 제거해서 분해하는 과정입니다.
이는 이행적 종속성을 제거하는 단계입니다.
제3정규형 테이블
고객 테이블에서 고객의 주소와 관련된 정보를 다루는 경우를 생각해보면 아래와 같습니다.
고객테이블
고객 ID | 고객이름 | 우편번호 | 주소 |
1 | 김이름 | 12345 | 서울 |
2 | 박이름 | 98765 | 미국 |
여기서 주소는 우편번호에 이행적으로 종속돼 있습니다. 따라서 우편번호와 주소를 분리해 제3정규형을 만듭니다.
고객테이블
고객 ID | 고객이름 | 우편번호 |
1 | 김이름 | 12345 |
2 | 박이름 | 98765 |
주소테이블
우편번호 | 주소 |
12345 | 서울 |
98765 | 미국 |
제3정규화 장점
- 데이터 중복 최소화로 인해 저장 공간의 효율성 증가
- 데이터 무결성 및 일관성 유지
- 삽입, 삭제, 갱신 이상의 문제 해결
제3정규화 단점
- 정규화 과정에서 테이블이 분리되어 쿼리 복잡성 증가
- 조인 연산이 많아져 시스템 성능 저하 가능성 있음
댓글