김기창의 데이터베이스
엔티티를 대표하는 속성을 찾은 후에, 해당 속성이 대표 속성에 종속됐는지를 판단하면서 엔티티를 설계한다. 이런 과정을 정규화라고 한다.
정규화를 통해 데이터 무결성을 높힐 있다는 사실이 가장 중요한 이유이다.
정규화 : 특정 속성이 어떤 엔티티에 속해야 맞는지를 따져서 제자리인 한 곳에만 있도록 하는 과정.
함수 종속을 완전히 이해해야 정규화를 이해할 수 있다.
속성 사이의 종속성을 분석할 때 기준이 되는 값을 결정자라고 하고, 결정자의 값에 의해 정해지는 값을 종속자라고 한다. 고객 엔티티의 속성이 주민등록번호,이름,휴대전화번호,주소로 구성된다면 기준 속성은 주민등록번호가 결정자 나머지 속성이 종속자가 된다.
함수 종속은 이 두 속성간의 종속성을 의미하며, 결정자와 종속자는 하나의 엔티티에 존재해야하고 이 과정이 정규화이다.
함수 종속을 통해 속성의 제 주인 엔티티를 찾으면 anomaly가 발생하지 않는다.
정규화가 되지 않은 테이블
정규화를 통해 삽입,삭제,갱신등의 anomaly를 방지한다.
1정규화 : 관계형 데이터베이스에서 관리하는 속성의 값은
원자값이면서 나눌 수 없는 값이어야 한다.
1정규화에 연관된 속성 : 다가 속성,복합 속성
다가 속성이 존재하는 릴레이션
다가 속성이 존재하는 엔티티
논리적 다가 속성이 존재하는 엔티티
1정규화 대상이지만 수행을하지 않을 수도 있다. 1정규화의 기준은 개수가 정해져 있는 다가 속성은 1정규화 하지 않고, 업무에서 분리해서 사용하는 복합 속성은 1정규화를 진행한다.
2정규화 : 주 식별자가 두 개 이상일때, 일부 속성이 주 식별자 중 하나에만 종속된 것을 의미하는 부분 함수 종속을 제거해 주면 된다. 그렇기 때문에 2정규화는 주 식별자가 두 개 이상일 때만 대상이 된다.
주문상품 엔티티의 상품명,단가 속성이 상품번호에 종속
2 정규화 진행 예시
잘못된 속성명으로 2정규화를 시도하려 하는 테이블 예시
위 케이스의 정상적인 모델
X -> Y , Y -> Z, X -> Z의 이행 종속이 존재하는 경우 3정규형의 대상이 된다. 해당 간접 종속을 직접 종속으로 변경하는 정규화 작업을 수행한다.
고객명 -> 고객번호 , 고객번호 -> 주문번호의 순서로 종속이 되어있으니 고객명 -> 주문번호 속성의 간접 종속이 생긴다.
3정규화 완료 예시
BC정규화 : 모든 종속자 속성은 일반 속성이어야 한다. 종속자 속성이 주 식별자에 위치하는 경우 발생
종속자 속성인 교수번호 속성이 주 식별자에 있으니 BC정규화 위배
BC정규형 모델
4정규화는 다가종속을 제거하는 과정이다.
다가종속은 한 릴레이션에 다가 속성이 두 개 이상 존재할 때, 하나의 다가 속성 값이 다른 다가 속성의 모든 값마다 중복되는 것을 의미한다.
'홍길동'의 기술은 두개이고 언어는 세개, 다가 종속으로 인해 많은 중복 현상이 발생한다.
기술과 언어는 한 사원에 속해 간접적 연관 관계는 있지만, 업무 요건상 직접적인 관계가 없기 때문에 두 릴레이션으로 분해한다.
5정규화는 조인 종속을 제거하는 과정이다.
조인 종속이란 어떤 릴레이션을 분해한 다음에 조인해 다시 원래의 릴레이션으로 복원할 수 있는 경우이다.
5정규화는 오히려 엔터티가 늘어나며, 중복 성격의 데이터가 생기는 단점이 있다. 이론적이며 실익이 없는 정규화이기 때문에 지나치게 지킬 필요는 없다.
대부분의 프로젝트에서는 3정규화까지만 수행하는것을 원칙으로 한다.