안녕하세요 과외선생 J 입니다.
이번시간에는 다소 어려운 정규화에 대한 개념을 정리해보도록 하겠습니다.
정규화를 다르기 위해서는 이상현상, 그리고 함수종속성에 대한 개념을 알아야 합니다.
* 본 포스팅은 중부기술교육원 수업과 한빛미디어의 "오라클로 배우는 데이터베이스 개론과 실습 2판" 책을 기본바탕으로 공부한 뒤 작성되었음을 알립니다.
1. 이상현상
이상현상으로는 삭제이상, 삽입이상, 수정이상 3가지가 있습니다.
삭제이상 : 연쇄삭제로 인해 문제가 발생
-> 삭제하고자하는 투플만이 아닌 같이 저장된 다른 정보까지 연쇄적으로 발생되는 현상
삽입이상 : NULL값 문제 발생
-> 투플 삽입 시 특정 속성에 해당하는 값이 없어서 NULL값을 입력해야하는 현상
수정이상 : 불일치 문제 발생
-> 투플을 수정할 때 중복으로 저장된 데이터 일부만 수정되어서 데이터가 일치하지 않는 현상
2. 함수 종속성 (Functional Depentdency, FD)
속성과 속성 사이에 의존성이 존재하며 (종속) 하나의 속성이 다른 속성 하나에 대응이 될 때 함수적으로 종속되어 있다고 말합니다.
즉, 하나를 알면 다른하나가 자연스럽게 결정이 되거나 알 수 잇게 될 때 함수종속성이 있다고 합니다.
이것을 수학적으로 X → Y라고 표현하며 X는 결정자, Y는 종속 속성 이라고 합니다.
함수 종속성에 대한 규칙이 3가지가 있고 규칙으로부터 나온 부가규칙 3가지가 있습니다.
A, B, C 가 릴레이션 R에 속해있는 집합이라고 할 때 다음과 같은 3가지 규칙이 성립합니다.
1) 부분집합 규칙(subset) : A⊆B 이면 B → A
2) 증가 규칙(augmentation) : A → B 이면 AC → BC
3) 이행 규칙(transitivity) : A → B 그리고 B → C 이면 A → C
부가 규칙
1) 결합규칙 (Union) : A → B 그리고 A → C 이면 A → BC
2) 분해규칙 (decomposition) : A → BC 이면 A →B 그리고 A → C
3) 유사이행 규칙 (pseudotransitivity) : A → B 그리고 DB → C 이면 DA → C
(* →는 종속관계를 나타낸다)
테이블에서 함수종속성을 찾는 첫번째 방법은 기본키를 찾는 것입니다.
기본키값은 유일한 값이므로 모든 속성에 대한 결정자가 될 수 있습니다.
3. 정규형
이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 나눌 수 있으며 정규형이라는 개념으로 구분을 합니다.
정규형이 높을 수록 이상현상은 줄어든다.
1) 제1정규형 (1 NF)
릴레이션 R의 모든 속성값이 원자값을 가지면 제1정규형이라고 한다.
원자값을 가진다 = 속성에 데이터값이 하나가 있어야 한다.
-> 릴레이션 속성에 데이터값이 2개 이상 있을 경우 이상현상을 일으킬 수 있으며 제1정규형을 위반한것이 된다.
이상현상 해결 방법 : 데이터 값이 1개씩만 들어갈 수 있게 릴레이션을 분해하면 된다.
2) 제2정규형(2NF)
일단 테이블이 제1정규형을 만족해야 제2정규형이 될 수 있다.
그리고 기본키 외 속성이 기본키에 완전 함수 종속이면 제2정규형이라고 한다.
-> 기본키가 복합키인데 그 일부분이 다른 속성의 결정자인지 판단한다.
-> 예를 들어 기본키의 A라는 속성이 A → B 이면 제2정규형 위반이라고 한다.
* 완전 함수 종속 : 릴레이션 R에 속하는 A와 B가 있을 때 A → B 이면서 B가 A의 속성 전체에 함수 종속하고 부분집함 속성에 함수 종속하지 않을 경우 완전 함수 종속이라고한다.
해결 방법 : 이상현상을 일으키는 기본키의 속성에 종속성을 가지는 릴레이션으로 분해한다.
즉 기본키의 속성 중 A → B를 다른 릴레이션으로 분해하면 된다.
3) 제3정규형(3NF)
이행적 종속 여부 판단
제1정규형, 제2정규형을 만족 해야 제3정규형이 될 수 있다.
A → B 그리고 B → C 이면 A → C 가 성립되는 함수 종속성을 따르지 않을 때 비이행적 종속이라고 말한다.
이행적 종속을 할 경우 제3정규형 위반이라고 말할 수 있다.
해결 방법 : 고리를 끊어준다는 개념으로 릴레이션을 분해하면 된다.
즉 A → B 그리고 B → C 이므로 A → B 릴레이션과 B → C 릴레이션으로 분해한다.
4) BCNF
함수 종속성에서 모든 결정자가 후보키인 경우를 말한다.
해결 방법 : 결정자인 후보키에 관련한 릴레이션을 분해한다.
4. 무손실 분해
정규화를 다시 한번 정의하자면 릴레이션을 분해하여 이상현상을 제거하는 과정을 말한다.
이 때 분해하면서 데이터의 손실이 발생하지 않게 분해를 해야 하는데 그러기 위해서는 분해되는 릴레이션 간에 공통속성을 한개 이상 두면 된다.
공통속성은 릴레이션을 조인할 때 사용이 된다. 그러므로 분해되는 릴레이션의 키가 공통속성이 되어야 무손실 분해를 만족하게 된다.
나름 개념 정리라고 해보았지만 많이 어려운 개념입니다.
정규화는 실습을 통해서 확실히 익히시는게 가장 좋은 방법인 것 같습니다.
다들 공부하신다고 고생하셨습니다. ^^
'Database > SQL' 카테고리의 다른 글
[SQL] SQLD 시험 후기 ... (feat.광탈) (0) | 2020.12.31 |
---|---|
[SQL] SQLD 시험을 위한 독학 책 추천! (0) | 2020.11.25 |
[SQL] SQL 고급문법 - index (0) | 2020.11.24 |
[SQL] SQL 고급문법 - 뷰 (0) | 2020.11.23 |
[SQL] SQL 고급문법 - 부속질의 (0) | 2020.11.23 |
댓글