정규화(Normalization)란?
정규화란,
하나의 릴레이션(Relation)에 하나의 의미만 존재하도록 릴레이션을 분해하는 과정이다.
데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이다.
정규화의 목적
(1) 불필요한 데이터를 제거해 불필요한 중복을 최소화한다.
(2) 삽입/갱신/삭제 시 발생할 수 있는 이상 현상(Anomaly)를 방지하기 위해, 테이블의 구성을 논리적이고 직관적으로 한다.
정규화의 원칙
(1) 정보의 무손실 : 분해된 릴레이션이 표현하는 정보는 분해하기 전의 정보를 모두 포함해야 한다.
(2) 최소 데이터 중복 : 이상 현상을 제거, 데이터 중복을 최소화
(3) 분리의 원칙 : 하나의 독립된 관계성은 하나의 독립된 릴레이션으로 분리해서 표현
정규화의 장점
(1) 데이터베이스 변경 시 이상현상이 발생하는 문제점을 해결할 수 있다.
(2) 데이터베이스 구조 확장 시 정규화된 데이터베이슨느 그 구조를 변경하지 않아도 되거나 일부만 변경해도 된다.
정규화의 단점
(1) 릴레이션의 분해로 인해 릴레이션 간의 연산(JOIN 연산)이 많아진다. 이로 인해 질의에 대한 응답 시간이 느려질 수 있다.
제 1 정규화
[ 제1 정규화 ]
제1 정규화란 테이블의 칼럼이 원자 값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해하는 것.


제2 정규화
[ 제2 정규화 ]
제2 정규화란, 제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것.
완전 함수 종속이란? 기본키의 부분집합이 결정자가 되어선 안되는 것을 의미한다.

위의 테이블의 기본키는 (학생번호, 강좌이름)으로 복합키이다.
그러나 강의실은 기본키의 부분집합인 강좌이름에 의해 결정될 수 있다.
또한 성적은 기본키의 부분집합인 학생번호에 의해 결정될 수 있다.
따라서, 강의실을 분해하여 별도의 테이블로 관리하여 제2 정규형을 만족시킬 수 있다.

제3 정규화
[제3 정규화]
제3 정규화란 제2 정규화를 진행한 테이블에 대해 이행적 함수 종속을 없애도록 테이블을 분해하는 것
이행적 함수 종속이란, A -> B, B -> C가 성립할 때, A -> C 가 성립되는 것을 의미한다.
# A -> B의 관계에서, A는 결정자(Determinant) B는 종속자(Dependant)라고 한다.
# 함수 종속성은 완전 함수 종속, 부분 함수 종속, 이행적 함수 종속 총 3가지로 나뉜다.

위의 테이블에서 학생번호는 강좌 이름을, 강좌 이름은 수강료를 결정하고 있다.
따라서 (학생번호, 강좌이름) 테이블과 (강좌이름, 수강료) 테이블로 분해해야 한다.
이행적 함수 종속을 제거해야하는 이유는 뭘까?
예를 들어, 501번 학생이 강좌를 스포츠경영학으로 변경한다고 할 때, 이행적 함수 종속이 존재한다면 스포츠경영학을 20000원의 수강료로 듣게 된다.

이상현상(Anomaly)이란?
데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하고 전체적인 무결성이 저하된다. 이러한 원인은 데이터 이상 현상(Anomaly)에 의해 발생하며, 이상 현상으로 인해 현실세계의 실제 값과 데이터베이스에 저장된 값이 일치하지 않는 문제가 발생한다.
이상현상의 종류는 삽입(Insertion) 이상, 삭제(Delete) 이상, 갱신(Update) 이상 총 3가지이다.

위의 테이블로 3가지 이상 현상에 대해 알아보자.
삽입 이상(Insertion Anomaly)
삽입 이상이란, 테이블에 데이터를 삽입할 때 원래의 의도와 상관없이 원하지 않는 값들로 인하여 삽입되지 않는 현상을 의미한다.

강의를 듣지 않는 학생을 추가할 때, 과목 번호와 성적에 null값이 들어가거나 불필요한 데이터를 추가해야 삽입할 수 있는 문제점이 발생한다. 따라서 위의 데이터는 삽입할 수 없다.
삭제 이상(Delete Anomaly)
삭제 이상이란, 특정 정보를 삭제하면 원치 않는 정보도 함께 삭제되는 현상이다.

(1) 학번이 300인 학생이 과목 수강을 취소하면, C-73인 강의에 대한 정보도 모두 삭제된다.
(2) P1 교수가 강의하는 과목을 모두 취소하는 경우 학번이 123인 학생에 대한 정보도 모두 삭제된다.
갱신 이상(Update Anomaly)
갱신 이상이란, 중복 튜플 중 일부만 변경되어 데이터가 불일치하게 되는 현상이다.
[Reference]
'CS > DB' 카테고리의 다른 글
| DB 면접 대비 - 트랜잭션(Transaction) (0) | 2024.03.14 |
|---|---|
| DB 면접 대비 - 인덱스(index) (0) | 2024.03.13 |
| DB 면접 대비 - 프로시저(Procedure) (0) | 2024.03.13 |
| DB 면접 대비 - 트리거(Trigger) (0) | 2024.03.13 |