정규화란?

: 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정 → 테이블 간에 중복된 데이터를 허용x
- 데이터의 무결성(Integrity)를 유지하며, DB 저장 용량을 절약 가능 !
- 무결성이란? : 데이터가 전송, 저장되고 처리되는 모든 과정에서 변경되거나 손상되지 않고 완전성, 정확성, 일관성을 유지함을 보장하는 특성.
이상현상이 뭔데?
1) 삽입이상(Insertion Anomaly)
: 새로운 데이터를 삽입할 때 불필요하게 다른 관련 데이터도 함께 삽입하는 경우
- ex) 새로운 학생 503번 홍길동이 수강하려고 할 때, 강좌 정보가 없으면 학생 정보를 삽입할 수 없다.
2) 삭제이상(Deletion Anomaly)
: 데이터베이스에서 특정 데이터를 삭제할 때 불필요하게 다른 관련 데이터까지 함께 삭제되는 현상 (연쇄삭제)
- ex) 만약 강좌이름 = ‘데이터베이스’ 강좌가 폐지되어 해당 강좌 정보를 삭제하려고 할때, 이 강좌를 수강하는 학생 정보도 함께 삭제된다.
3. 수정이상(Update Anomaly)
: 특정 데이터를 수정할 때 동일한 정보가 여러 곳에 중복되어 있어 일관성 문제가 발생하는 경우
- ex) 학생 501번 박지성의 주소를 맨체스터에서 서울로 변경하려고 할 때, 여러 테이블에 중복된 정보가 있으면 모든 정보를 일관되게 수정해야 함.
정규화 과정
제 1 정규화
: 릴레이션의 모든 속성 값이 원자 값을 가져야 한다.
| 학생번호 | 학생이름 | 학과 |
| 501 | 박지성 | 컴퓨터과, 체육학과 |
- 박지성이 여러 개의 학과를 가지고 있기 때문에 제 1 정규형을 만족하지 못한다.
- 제 1 정규화를 진행한 테이블은 다음과 같다.
| 학생번호 | 학생이름 | 학과 |
| 501 | 박지성 | 컴퓨터과 |
| 501 | 박지성 | 체육학과 |
제 2정규화
: 제 1 정규형을 만족하면서, 부분집합 종속성을 제거해 이상현상을 방지하고 완전 종속을 만족해야 한다.
💡 완전 함수 종속이란?
: 기본키의 부분집합이 결정자가 되어선 안되는 것을 의미

- 학생이름과 주소, 학과는 각각 학생 번호에 의해 완전 종속한다.
- But, 학과 사무실은 학과에 의해 결정될 수 있다. (강좌이름) → (강의실)
- 다음은 제 2 정규화를 진행한 테이블이다.


제 3정규형
: 제 2 정규형을 만족하면서, 모든 비 기본키 속성이 기본 키에 비이행적으로 종속되도록 하는 것
💡 이행 함수 종속이란?
: A→B, B→C가 성립할 때 A→C가 성립
: 비기본 키 속성이 다른 비기본 키 속성에 종속되지 않아야 한다는 것을 의미
: 비기본 키 속성은 기본 키에 직접적으로 종속되어야 함.

- 학과사무실은 학과에 종속되어 있고, 강의실은 강좌이름에 종속되어 있다.
- 성적은 학생번호와 강의 이름에 이행적으로 종속된다 → 이를 제거하기 위해 테이블을 분리해야한다.

📌 정리
데이터가 중복될 경우 테이블에서 이상현상(삽입이상, 삭제이상, 갱신이상)이 발생할 수 있당.
이를 해결하기 위해 우리는 “테이블/컬럼 분리”를 진행하는 정규화 과정을 거치게 된다.
이를 통해 우리는 데이터 중복을 최소화 하고, 데이터 무결성을 유지하며 효율적인 데이터 관리가 가능하닷 !
닷 !

참고자료: KB IT's You Life 교안
'[Database] 데이터베이스' 카테고리의 다른 글
| [코딩테스트를 위한 SQL 벼락치기] 완전 정복 ! (미완성본) (2) | 2024.10.31 |
|---|---|
| [SQL] Error Code: 1175 (3) | 2024.07.17 |