하나의 릴레이션에 관련없는 속성이 들어가지 않게 하기위해서 속성들의 친밀도를 정확히 판단하고, 이 기준에 따라 릴레이션을 구성하는 방법을 정규화라고 한다. 또는 데이베이스를 잘못 설계하면 불필요한 데이터 중복이 발생하여 릴레이션에 대한 데이터의 삽입, 수정, 삭제 연산을 수행할 때, 부작용이 발생할 수 있는데 이러 한 부작용을 이상현상이라고 하고, 이상 현상을 제거하면서 데이터베이스를 올바르게 설계해나가는 과정이 정규화이다.
이상 현상의 종류
- 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신 이상: 중복 tuple 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
- 삭제 이상: tuple을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실의 문제
정규화의 필요성
그렇다면 이상현상이 발생하는 이유는 무엇인가? 그 것은 관련 없는 속성들을 하나의 릴레이션에 모아두고 있기 때문이다. 그래서 필요한게 정규화이고, 이는 이상 현상이 발생하지 않도록, 릴레이션을 관련이 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정이다. 이때, 정규화 과정에서 고려해야 하는 속성들 간의 관련성을 함수적 종속성이라고 한다.
함수 종속
하나의 릴레이션을 구성하는 속성들의 부분 집합을 X와 Y라고 할 때, 어느 시점에서든지 릴레이션 내의 모든 투플에서 하나의 X 값에 대한 Y값이 항상 하나면 X가 Y를 함수적을 결정한다고 한다. 이때, 함수 종속 관계는 X -> Y로 표현하고 X를 결정자, Y를 종속자라고 한다. 일반적으로 릴레이션에 함수 종속성이 하나 존재하도록 정규화를 통해 릴레이션을 분해한다.
- 완전 함수 종속: 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X 전체에 종속된 것이지 일부분에 종속된 것이 아님을 의미한다.
- 부분 함수 종속: 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미하므로, 부분 함수 종속 관계가 성립하려면 결정자가 여러 개의 속성들로 구성되어 있어야 한다.
정규화의 개념과 정규형의 종류
정규화의 기본 목표는 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현하는 것이다. 그리고 릴레이션이 정규화된 정도는 정규형으로 표현한다. 정규형은 크게 기본 정규형과 고급 정규형으로 나뉜다. 또 각 정규형마다 만족시켜야 하는 제약조건이 존재한다. 일반적으로 차수가 높은 정규형에 속하는 릴레이션일수록 데이터 중복이 줄어 이상 현상이 발생하지 않는 바람직한 릴레이션일 수 있다. 하지만, 모든 릴레이션이 제5정규형에 속해야 되는 것은 아니므로 릴레이션의 특성을 고려해서 적합한 정규형을 선택해야 한다.
- 제1정규형 : 릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제 1정규형에 속한다.
- 제2정규형 : 릴레이션이 제1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형에 속한다.
- 부분 함수 종속이 제거되도록, 릴레이션을 분해한다.
- 정규화 과정에서 수행되는 릴레이션의 분해는 무손실 분해여야 한다. 즉, 릴레이션이 의미상 동등한 릴레이션들로 분해되어야 하고, 릴레이션을 분해했을 때 정보 손실이 발생하지 않아야 한다.
- 제3정규형 : 릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지않으면 제3정규형에 속한다.
- 이행적 함수 종속이란 무엇인가? 이는 릴레이션을 구성하는 3개의 속성 집합 X, Y, Z에 대해 함수 종속 관계 X -> Y와 Y -> Z가 존재하면 논리적으로 X -> Z가 성립하는데, 이때 속성 집합 Z가 속성 집합 X에 이행적으로 함수 종속되었다고 한다.
- 이행적 함수 종속 관계가 존재한다면 이상 현상이 발생할 수 있는데, 이럴때는 함수 종속 관계의 의미가 유지되도록 분해해야 한다. 즉, X와 Y의 속성 집합의 릴레이션과 Y와 Z의 속성 집합의 릴레이션으로 분해한다.
- 보이스/코드 정규형(BCNF) : 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다.
- 즉, 후보키가 아닌 결정자를 분해하기 위해서 릴레이션을 분해해야 한다.
- 제4정규형: 릴레이션이 보이스/코드 정규형을 만족하면서, 함수 종속이 아닌 다치 종속을 제거해야 만족할 수 있다.
- 제5정규형 : 릴레이션이 제4정규형을 만족하면서 후보키를 통하지 않는 조인 종속을 제거해야 만족할 수 있다.
정규화 과정 정리
정규화 과정 예시
'컴퓨터 사이언스 > Database' 카테고리의 다른 글
데이터베이스 설계 실습 - 스타벅스 홈페이지 (0) | 2023.06.25 |
---|---|
데이터베이스 설계 실습 - 맥도날드 키오스크 (0) | 2023.06.25 |
데이터베이스 설계 (0) | 2023.06.24 |
키의 종류 (0) | 2023.06.24 |
Join 시, on과 where의 차이 (0) | 2023.04.13 |