정규화가 왜 필요한지에 대해서는 아래 포스팅에서 확인할 수 있다.
https://josteady.tistory.com/747
기본 정규형은 제1,제2,제3 정규형과 보이스/코드 정규형이 있으며 (순서대로)
고급 정규형은 제4,제5 가 있다.
기본적으로는 기본정규형만 만족하더라도 충분히 사용가능한 테이블을 만들 수 있다.
물론 숫자가 높을 수록 바람직한 정규화가 될 가능성이 있지만, 상황에 따라 적절히 선택할 수 있어야하며,
오히려 제 5정규형을 만족할 때까지 분해하면 비효율적이며 바람직하지 않은 경우가 많다고 한다.
따라서 고급정규형은 생략했다.
기본 정규형 종류 | 조건 |
제1정규형 | 테이블에 속한 모든 도메인이 원자값(더이상 나누어지지 않는 값)으로만 구성된다. |
제2정규형 | 테이블이 제1정규형에 속하고, 모든 속성이 기본키에 완전 함수 종속된다. |
제3정규형 | 테이블이 제2정규형에 속하고, 이행적 함수 종속이 되지 않아야 한다 * 이행적 함수 종속 : X -> Y , Y -> Z 일때 , X ->Z 이다. |
보이스/코드 | 테이블의 함수 종속 관계에서 모든 결정자가 후보키일 경우 |
제 1 정규형부터 제 3 정규형까지의 테이블 변화 예시를 아래에서 보자
제 1정규형
테이블 속성의 모든 도메인이 단 하나의 원자성을 가지고 있는 형태이다.
다중 값 속성을 가지고 있지 않지만, 이상현상이 발생하므로 추가적인 단계가 필요하다
제 2정규형
다음으로 제 2정규형을 보면 테이블이 2개로 나뉘었다. 또한, 고객아이디가 중복되지 않는다.
제 2정규형 과정에서 고려해야 할 사항은 이전 제1정규형의 테이블로 복원할 수 있어야 한다는 점이다.
아래 테이블에서는 조인을 이용해 이전 테이블로 복원할 수 있는 형태이다
하지만 제 2 정규형에서도 이상현상이 일어날 가능성이 있다.
고개참여 테이블에서 gold 가 2개가 있는데, 만약 고객아이디 1번의 gold 등급 할인율만 15% 로 변경할 경우,
고객아이디 3번인 고객은 등급이 gold 지만 10% 의 할인을 받기 때문이다. ( 갱신이상 )
제 3정규형
제 3정규형에서는 고객참여 테이블을 나눈다.
고객 등급 테이블로 나누어 중복을 제거함으로써 제 2정규형의 이상현상을 해결할 수 있다.
보이스/코드 정규형 - 기본형의 마지막 단계 정규형
보이스/코드 정규형은 강한 제3정규형이라고 불리기도 한다. 제 3규형보다 더욱 강력한 제약조건을 가지고 있다.
제3정규형이 보이스/코드 정규형에 속하는 경우도 많다.
아래의 예는 제3정규형에는 속하지만, 보이스/코드 정규형에는 속하지 않는 예시이다.
고객이 인터넷강좌를 여러개 신청할 수 있으며, 동일한 강좌를 여러번 신청할 수 없다.
강사 한명은 인터넷강좌 1개만 담당할 수 있으며, 하나의 인터넷강좌는 여러 강사가 담당할 수 있다.
고객아이디가 결정자가 되어 인터넷강좌의 담당강사번호를 알 수 있고,
인터넷강좌가 결정자가 되어 누가 담당하는지 담당강사번호를 알 수 있다.
보이스/코드 정규형에 속하지 않은 위의 테이블은 이상 현상이 발생할 수 있다.
고객이 신청하지 않은 인터넷강좌는 고객아이디가 null 이기 때문에 삽입이상이 발생하며,
가장 아래 행의 담당강사번호가 500으로 변경된다면 고객아이디 3 , 수학, 400 이랑 불일치로 갱신이상이 발생한다.
또한, 2번 고객의 인터넷강좌를 삭제했는데 인터넷강좌를 담당하는 담당강사번호의 정보까지 삭제되어버려 삭제이상이 발생한다.
이런 이상현상을 해결하기 위해 아래와 같은 테이블로 나눌 수 있다.
정규형의 과정은 제 1 부터 보이스/코드 정규형까지 순차적으로 이루어진다.
하지만, 요구사항분석에 따라 제 3정규형에서 이상현상없이 마무리될지는 상황에 따라 다르다.
개인프로젝트를 준비하면서 ERD 정규화를 하고 있는데 개념과 어떤 형식인지 시기에 맞아 좋은 학습시간이 되었다.
'DATABASE' 카테고리의 다른 글
데이터베이스(DB) 병행 제어 (0) | 2022.11.01 |
---|---|
데이터베이스(DB) 장애와 회복 (0) | 2022.10.29 |
데이터베이스(DB) 정규화는 왜 필요할까? (0) | 2022.10.26 |
데이터베이스(DB) 설계 (0) | 2022.10.26 |
데이터베이스(DB) 관계 데이터 모델 개념 (0) | 2022.10.24 |
댓글