- 관계형 데이터베이스의 설계에서 중복을 줄이기 위해 데이터를 구조화하는 프로세스
- 테이블에서의 데이터 삽입, 삭제, 변경 시 일어나는 이상 현상을 해결하기 위해 정규화를 한다.
- 비공식적으로 제 3 정규화가 되었으면 대부분의 이상 현상이 없어 정규화 되었다고 한다.
-
삽입 이상
- 원하는 값만 테이블에 삽입하고 싶을 때 테이블에 필요하지 않은 필드 때문에 원치 않은 필드의 값도 삽입해야 할 경우
- 예시) 교수id, 교수 이름, 수업 코드를 가진 테이블에서 수업을 아직 배정 받지 않은 교수의 수업 코드를 추가할 수 없음
-
삭제 이상
- 어떤 정보를 삭제할 때 삭제하면 안되는 다른 사실이 함께 삭제될 경우
- 예시) 교수 id, 교수 이름, 수업 코드를 가진 테이블에서 수업 정보를 삭제하게 되면 교수 정보 전체가 삭제됨
-
갱신 이상
- 같아야 하는 정보가 복수 개의 행에서 표현될 경우
- 예시) 교수 id, 교수 이름, 수업 코드를 가진 테이블에 한 교수가 여러 수업을 가져 교수 id와 교수 이름이 중복된 행이 있을 때, 교수가 개명을 해서 교수 이름을 수정하면 해당 교수 id의 모든 교수 이름을 수정해야 한다. 만약 일부만 변경될 경우 같은 교수 id에 다른 이름을 가진 교수 행이 생길 수 있다
- 튜플의 모든 속성이 도메인에 속하는 하나의 값을 가진다.
- 복합 애트리뷰트, 다중 값 애트리뷰트, 중첩 릴레이션 등을 허용하지 않은 릴레이션 형태이다.
- 학생, 전화번호를 가진 테이블에서 어떤 학생이 전화번호를 여러 개 가질 경우?
- 학생 : (길동), 전화번호 : (010-1111-1111 010-2222-3333) → 하나의 속성이 두 개의 값을 가지므로 1 정규형 위반
- 학생 : (길동), 전화번호1 : (010-1111-1111), 전화번호2 : (010-2222-3333) → 완전히 동일한 도메인과 의미를 가지므로 1 정규형 위반
- 제 1 정규형을 만족하고 후보키를 제외한 모든 속성이 후보키에 대해 완전 함수적 종속이여야 한다.
- 학생 id, 학생 취미, 학생 이름을 가진 테이블에서 후보키는 학생 id와 학생 취미의 복합키이다. 그런데 후보키가 아닌 학생 id가 학생 이름을 결정 지으므로 이는 2 정규형을 위반한다.
- 제 2 정규형을 만족하고 테이블 내 모든 속성이 기본키에만 의존하는 것이다.
- 모든 컬럼이 이행적 종속이 되지 않음을 의미한다.
- 대회, 연도, 우승자, 우승자 이름을 가진 테이블에서 대회와 연도가 기본키로 우승자와 우승자 이름을 결정한다. 하지만 기본키가 아닌 우승자가 우승자 이름을 결정하므로 이는 이행적 종속에 해당된다. 따라서 3 정규형을 위반한다.
- 제 3 정규형을 만족하고 테이블 내 모든 결정자가 기본키임을 만족한다.
- 학생, 수업, 교수를 가진 테이블에서 학생과 수업이 기본키일 때 제 3 정규형을 만족한다. 하지만 기본키가 아닌 교수가 수업을 결정하므로 BCNF를 위반한다.
- 장점 : 이상 현상을 제거할 수 있고 구조를 변경할 시 최소한의 영향을 미칠 수 있게 된다.
- 단점 : 너무 많은 분해는 join연산을 늘리므로 응답시간이 느려질 수 있다. 따라서 조회를 자주 하여 성능 저하가 나타날 경우 반정규화를 적용하여 대응한다.
- 정규화된 릴레이션을 시스템의 성능 향상 및 개발과 운영의 단순화를 위해 중복 통합, 분리 등을 수행하는 데이터 모델링 기법
- 테이블 끼리 거리가 멀거나 칼럼을 계산하여 조회하는 경우가 많아 성능이 저하될 것이 예상될 경우 부분적으로 반 정규화를 고려한다.
- 주요 대상
- 자주 사용되는 테이블에 특정 범위만 조회하는 경우
- 지나치게 조인을 많이 하여 조회하는 것이 성능 저하를 줄 경우