데이터베이스 정규화(Normalization) 란?
관계형 데이터베이스에서 데이터베이스의 중복을 줄이고, 데이터의 무결성을 유지하기 위해 데이터를 정규형에 맞게 구조화 하는 프로세스를 의미한다.
또한 정규화는 이상현상(Anomaly)이 있는 릴레이션을 분해하여 이상현상을 없앤다.
이를 통해 데이터베이스를 직관적이고 체계적으로 관리할 수 있으며, 데이터베이스 저장 공간을 효율적으로 관리할 수 있다.
제 1 정규화 (1NF)
테이블의 컬럼이 원자값(하나의 값) 을 갖도록 분해하는 정규화이다.
이름 | 직업 |
---|---|
김철수 | 의사 |
박영희 | 프로그래머,작가 |
이훈이 | 축구선수 |
한유리 | 교사,유튜버 |
여기서 박영희와 한유리의 직업 속성에는 두 개의 값을 가지고 있기 때문에 제 1 정규형을 만족하지 못한다.
이름 | 직업 |
---|---|
김철수 | 의사 |
박영희 | 프로그래머 |
박영희 | 작가 |
이훈이 | 축구선수 |
한유리 | 교사 |
한유리 | 유튜버 |
제 1 정규화를 통해 컬럼이 하나의 값, 즉 원자값을 갖도록 테이블을 분해한다.
제 2 정규화 (2NF)
제 1 정규화를 진행한 테이블이 완전 함수 종속을 만족하도록 부분 함수 종속을 제거하는 것을 의미한다.
완전 함수 종속이란, 종속자가 기본키에만 종속되며 기본키가 여러 속성으로 구성되어 있을 경우 기본키를 구성하는 모든 속성이 포함된 기본키의 부분집합에 종속된 경우이다.
부분 함수 종속은 완전 함수 종속과는 반대로, 종속자가 기본키가 아닌 속성에 종속되거나, 기본키가 여러 속성으로 구성되어 있을 경우 기본키의 전체가 아닌 부분집합에만 종속된 경우이다.
제조사 | 모델 | 모델 전체 이름 | 제조 국가 |
---|---|---|---|
현대 | 그랜저 | 그랜저 IG | 대한민국 |
기아 | 소렌토 | 소렌토 하이브리드 | 대한민국 |
테슬라 | 모델 S | 모델 S | 미국 |
벤츠 | GLC | GLC 220 d | 독일 |
위 예시에서 기본키는 제조사와 모델이고, 모델 전체 이름은 기본키인 제조사와 모델에 종속되어 있다.
하지만, 제조 국가는 제조사에만 종속되어 있기 때문에 완전 함수 종속을 만족하지 못한다.
위 테이블을 다음과 같이 분해하여 제 2 정규형을 만족시킬 수 있다.
자동차 모델 테이블
제조사 | 모델 | 모델 전체 이름 |
---|---|---|
현대 | 그랜저 | 그랜저 IG |
기아 | 소렌토 | 소렌토 하이브리드 |
테슬라 | 모델 S | 모델 S |
벤츠 | GLC | GLC 220 d |
자동차 제조 국가 테이블
제조사 | 제조 국가 |
---|---|
현대 | 대한민국 |
기아 | 대한민국 |
테슬라 | 미국 |
벤츠 | 독일 |
제 3 정규화 (3NF)
제 2 정규화를 진행한 테이블에 대해 이행적 종속을 없애는 정규화이다.
이행적 종속이란, X -> Y 과 Y -> Z 이 성립하면, X -> Z도 성립하는 것을 의미한다.
학번 | 이름 | 학과코드 | 학과명 |
---|---|---|---|
1001 | 홍길동 | CS | 컴퓨터공학과 |
1002 | 김철수 | EE | 전자공학과 |
위 테이블에서 학과 코드는 학번에 종속되어 있고, 학과명은 학과코드에 종속되어 있다. (학번 -> 학과코드 -> 학과명)
따라서 이 테이블에는 이행적 종속이 존재하고, 이 테이블을 다음과 같이 분해하여 제 3 정규형을 만족시킬 수 있다.
학생 테이블
학번 | 이름 | 학과코드 |
---|---|---|
1001 | 홍길동 | CS |
1002 | 김철수 | EE |
학과 테이블
학과코드 | 학과명 |
---|---|
CS | 컴퓨터공학과 |
EE | 전자공학과 |
BCNF 정규화
제 3 정규화를 진행한 테이블의 모든 결정자가 후보키가 되도록 테이블을 분해하는 정규화를 의미한다.
강의실 | 과목 | 교수 |
---|---|---|
101 | DB | 김교수 |
102 | AI | 이교수 |
103 | CS | 박교수 |
위 테이블에서 강의실은 교수를 결정하지만, 결정자인 강의실은 전체 후보키가 아니다. 전체 후보키는 강의실과 과목이다.
이를 다음과 같이 분리하여 BCNF 정규형을 만족시킬 수 있다.
교수 테이블
강의실 | 교수 |
---|---|
101 | 김교수 |
102 | 이교수 |
103 | 박교수 |
과목 테이블
강의실 | 과목 |
---|---|
101 | DB |
102 | AI |
103 | CS |