📌 정규화란?
정규화(Normalization)
는 데이터의 중복을 최소화하고 무결성을 지키기 위해 데이터를 구조화하는 방법이다.
장점
- 중복 데이터가 줄어들기 때문에 저장공간이 줄어든다.
- 데이터의 일관성을 유지할 수 있다.
단점
- 여러 테이블에 데이터가 분산될 수 있다.
- 데이터 조회 시 조인 연산이 필요할 수 있다.
📌 이상 현상
데이터의 중복 및 불일치로 발생하는 문제를 이상 현상(Anomaly)
라고 한다. 이상 현상의 종류는 삽입 이상, 삭제 이상, 갱신 이상이 존재한다.
id | student_name | lecture_id | lecture_name |
---|
1 | James | 101 | math |
2 | James | 103 | physics |
3 | Chris | 102 | english |
위와 같은 초기 테이블 STU_LEC이 있다고 가정하자.
삽입 이상
새로운 데이터를 삽입할 때 정보가 부족하여 삽입이 불가능한 상황을 말한다. 예를 들어 아무 과목도 수강하지 않는 학생이 있다고 가정하자. STU_LEC에 해당 학생의 정보를 삽입하기 위해서 lecture_id, lecture_name은 null이 되어야 한다.
삭제 이상
특정 데이터를 삭제할 때 의도치 않게 다른 데이터를 잃게 되는 상황을 말한다. 예를 들어 STU_LEC에서 student_name이 Chris인 행을 삭제하면 lecture_name이 english인 정보까지 같이 삭제가 된다.
갱신 이상
데이터를 수정할 때 동일한 데이터가 여러 곳에 존재하여 모든 데이터를 일관성있게 수정하지 못하는 상황을 말한다. 예를 들어 STU_LEC에서 id가 1인 행의 student_name을 Sarah라고 수정했다고 가정하자. 그러나 id가 1인 행과 2인 행은 같은 학생이므로, 정보의 불일치가 발생한다.
데이터베이스를 설계할 때, 항상 정규화를 적용하는 것은 적합하지 않다. 정규화가 답이 아니라는 것이다. 비즈니스 요구사항을 고려하여 비정규화 또한 고려해야 한다.
📌 정규화 단계
정규화 단계는 제1 정규화(1NF), 제2 정규화(2NF), 제3 정규화(3NF), Boyce-Codd Normal Form(BCNF), 제4 정규화(4NF), 제5 정규화(5NF)가 존재한다. 보통 정규화를 수행하는 경우 BCNF까지 진행하며, 그 이후로는 진행하지 않는다. 그 이유는 정규화의 단점이 부각될 수 있기 때문이다.
제1 정규형(1NF)
학생ID | 학생이름 | 수업 |
---|
1 | 홍길동 | 수학, 영어 |
2 | 김영희 | 과학 |
3 | 이철수 | 수학, 음악 |
위 테이블의 수업 속성은 여러 값을 가지고 있다. 따라서 원자성을 만족하지 않는다.
학생ID | 학생이름 | 수업 |
---|
1 | 홍길동 | 수학 |
1 | 홍길동 | 영어 |
2 | 김영희 | 과학 |
3 | 이철수 | 수학 |
3 | 이철수 | 음악 |
제2 정규형(2NF)
- 1NF를 만족해야 하며 부분 종속(partial dependency)가 없어야 한다.
- 기본 키가 아닌 속성이 기본 키의 일부에 의존하는 경우를 부분 종속이라고 한다.
학생ID | 수업ID | 학생이름 | 수업이름 |
---|
1 | 101 | 홍길동 | 수학 |
1 | 102 | 홍길동 | 영어 |
2 | 103 | 김영희 | 과학 |
3 | 101 | 이철수 | 수학 |
3 | 104 | 이철수 | 음악 |
위 테이블은 1NF를 만족하며, 기본 키는 (학생ID, 수업ID)이다. 그러나 학생이름 속성은 기본 키의 일부 속성은 학생ID에 종속적이다.
학생ID | 수업ID | 수업이름 |
---|
1 | 101 | 수학 |
1 | 102 | 영어 |
2 | 103 | 과학 |
3 | 101 | 수학 |
3 | 104 | 음악 |
제3 정규형(3NF)
- 2NF를 만족해야 하며 이행 종속(transitive dependency)이 없어야 한다. 즉, 기본 키가 아닌 속성들끼리 종속되는 현상이 없어야 한다.
- 속성 A가 속성 B에 종속되고, 속성 B가 속성 C에 종속된다고 할 때, 속성 C는 속성 A에 이행적으로 종속된다. 즉, A→B이고 B→C일 때, A→C를 만족하게 된다.
학생ID | 수업ID | 수업이름 |
---|
1 | 101 | 수학 |
2 | 102 | 영어 |
3 | 103 | 과학 |
1 | 101 | 수학 |
4 | 104 | 음악 |
위 테이블의 기본 키는 학생ID이다. 성립하는 함수적 종속성은 학생ID→수업ID, 수업ID→수업이름이다. 수업ID와 수업이름은 기본 키가 아니므로, 이행 종속을 만족하고 있다. 제3 정규화를 수행한 결과는 다음과 같다.
수업ID | 수업이름 |
---|
101 | 수학 |
102 | 영어 |
103 | 과학 |
104 | 음악 |
- 3NF를 만족해야 하며 모든 결정자(Determinant)가 후보 키 집합에 속해야 한다.
- FD A→B에서 A를 결정자라고 한다.
학생번호 | 강의이름 | 교수이름 |
---|
1 | 데이터베이스 | 김교수 |
2 | 알고리즘 | 이교수 |
3 | 운영체제 | 박교수 |
1 | 알고리즘 | 이교수 |
위 테이블의 기본 키는 (학생번호, 강의이름)이며, 교수이름→강의이름 함수적 종속성이 추가적으로 성립한다. 여기서 결정자는 교수이름이며, 교수이름은 후보 키 집합에 속하지 않는다.
교수이름 | 강의이름 |
---|
김교수 | 데이터베이스 |
이교수 | 알고리즘 |
박교수 | 운영체제 |
제4 정규형(4NF)
- BCNF를 만족해야 하며 다치 종속을 제거해야 한다.
- 다치 종속은 A→B에서 A가 단일 값, B가 다중 값인 경우를 말하며, 이를 A↠B라고 표기한다.
학생ID | 강의이름 | 주소 |
---|
1 | 데이터베이스 | 서울시 강남구 |
1 | 알고리즘 | 서울시 강남구 |
1 | 운영체제 | 서울시 강남구 |
2 | 데이터베이스 | 부산시 해운대구 |
2 | 알고리즘 | 부산시 해운대구 |
3 | 운영체제 | 대구시 중구 |
위 테이블에서 기본 키는 학생ID이며, 학생ID→강의이름, 학생ID→주소 함수적 종속성을 만족한다. 다치 종속성을 만족하므로 제 4정규화를 통해 테이블을 분해한다.
학생ID | 주소 |
---|
1 | 서울시 강남구 |
2 | 부산시 해운대구 |
3 | 대구시 중구 |
학생ID | 강의이름 |
---|
1 | 데이터베이스 |
1 | 알고리즘 |
1 | 운영체제 |
2 | 데이터베이스 |
2 | 알고리즘 |
3 | 운영체제 |
제5 정규형(5NF)
- Project Join Normal Form(PJNF)이라고도 부른다.
- 4NF를 만족해야 하며 조인 종속을 제거해야 한다.
- 조인 종속은 하나의 관계를 분해하고, 다시 조인했을 때 데이터 손실이 발생하거나, 필요없는 데이터가 생기는 것이다.
- 제5 정규형을 만족하기 위해서 테이블은 사실상 2개의 속성만 사용해야 한다.