1. 결합 종속성
함수 종속성을 사용한 정규화는 후보키가 되는 속성을 찾아내는 작업이다. 그리고 이런 숨겨진 후보키가 발견됐을 때에는 릴레이션을 무손실 분해해 릴레이션 내부의 중복을 제거할 수 있었다.
하지만 아직 중복성 제거의 싸움은 끝나지 않았다. 이를 위해 나온 것이 결합 종속성이다. (JD)
결합 종속성은 키 자체에 다중성이 포함됐을 때 나타나는 중복을 나타낸다.
[정의] A, B, ..., C를 릴레이션 R의 제목의 부분집합이라고 하자. 만약 A, B, ... , C의 프로젝션에 대응하는 릴레이션을 결합한 결과와 R이 같은 경우라면 이 경우에 한해 R은 다음의 결합 종속성을 만족시키게 된다.
☆{A, B, ..., C}
A, B, ..., C의 제목 중 하나가 R의 제목 전체와 같을 때는 그 결합 종속성이 명백하다고 말한다. 바꾸어 말하면 릴레이션 내에 명백하지 않은 결합 종속성이 있으면 그 릴레이션은 4NF~6NF의 정규화 대상이 된다.
결합 종속성은 무손실 분해가 가능
함수 종속성은 결합 종속성의 일종이다
암시적인 결합 종속성
- 공통의 후보키를 갖는 결합 종속성을 암시적으로 결합 종속성이라고 부르기로 한다.
키가 아닌 속성과 결합 종속성
4NF 이후 정규화를 해야 할지 아닐지를 판단하는 데 있어 중요한 것이 키가 아닌 속성의 유무이다.
다음의 조건이 충족하면 BCNF는 자동으로 5NF이 만족하게 된다.
- 키가 아닌 속성이 존재할 때
- 키에 포함되는 속성이 1개뿐 일 때
2. 결합 종속성에 의한 정규화 (4~6NF)
◆ 제 4정규형
일반적으로 '다치 종속성 MVD'에 의한 정규화라고 설명돼 있다. MCD는 결합 종속성의 특수한 경우로 결합 종속성을 사용해 설명할 수 있다. 반대로 결합 종속성을 사용하지 않고 설명하는 것이 어렵다. 일반적인 MVD라는 개념으로 4NF를 이해하는 것이 아니고 결합 종속성에 의한 MVD의 정의를 기억하는 쪽을 권장한다.
[정의] A, B, C를 릴레이선 R의 제목의 부분 집합이라고 하자. A, B, C가 다음의 결합 종속성을 만족할 때에만 'B와 C는 A에 다치종속한다'고 한다.
☆{AB, AC}
MVD는 다음과 같이 기호를 사용해 포현한다.
A→→B
A→→C
즉 4NF = BCNF + MVD 이고
MVD는 키가 아닌 속성을 갖지 않는 릴레이션을 결합 종속성에 의해 공통의 속성을 포함한 두 개의 릴레이션으로 무손실 분해할 수 있는 것이다.
역시나 말로만 들으면 어렵다.
이름 | 학과 | 수업 |
정은오 | DB | RDB |
정은오 | DB | C |
쿠와와 | SW | Python |
쿠와와 | SW | RDB |
이렇게 테이블이 있을 때 MVD를 갖는 릴레이션이다. 명확하지 않은 결합 종속성을 해소하려면 무손실 분해
즉 {이름, 학과}와 {이름, 수업}이라는 제목을 가진 두 개의 릴레이션으로 무손실 분해할 수 있다.
◆ 제 5정규형
5NF에서는 명백하지 않거나 암시적이지 않은 모든 결합 종속성이 제거된 상태를 나타낸다. 먼저 6NF에 관해 이야기 하자면 암시적인 결합 종속성을 포함해 한계까지 무손실 분해를 하는 것이 6NF이다.
☆{AB, BC, CA}
이것이 제 4정규형이랑 비슷해 보일 수 있겠지만 추가적으로 위의 테이블을 보면 python은 SW 만 듣고 있고 C는 DB학과만 듣고 있다. 이렇게 추가적으로 [ OO 수업은 OO 학과인 사람만 수강을 할 수 있다] 라는 규칙이 있다고 생각하면 된다.
연결의 함정
이처럼 한개의 릴레이션이 결합 종속성에 의해 세 개이상의 릴레이션으로 분해되는 결합 종속성을 연결의 함정이라고 한다. 좀 더 살펴보자면
1. 쿠와와는 SW학과에 소속돼 있고 [어떤 수업]을 수강한다.
2. 쿠와와는 [어떤]학과에 소속돼 있고 python을 수강한다.
3. [어떤 학생]은 SW학과에 소속돼 있고 python을 수강한다.
=> 4. 쿠와와는 SW학과에 소속돼 있고 python을 수강한다. 가 참이 된다.
일반적으로 논리학에서는 1~3의 세 가지 명제가 참이어도 4의 명제가 도출되지는 않는다
1 ^ 2 ^ 3 => 4
즉 위와 같은 명제는 성립되지 않는다. 이처럼 분해 후의 릴레이션이 원래의 릴레이션과 같은 사실을 나타내고 있지 않은 것처럼 보이는 현상을 연결의 함정이라고 한다.
그러나 이것은 얼핏 보기에 [함정]처럼 보일 뿐 실제는 어무런 함정도 없다. 원래의 릴레이션에 결합 종속성이 존재하기 때문이다.
곱집합과 결합 종속성
두 개의 속성밖에 포함하지 않고 키가 아닌 속성이 없는 릴레이션이 무손실 분해가 가능한 경우는 한 개의 속성밖에 가지지 않는 릴레이션 사이의 곱집합인 경우에만가능하다.
이러한 경우는 거의 없으므로 일반적으로 정규화 하는 데 있어 고려할 필요는 없을 것이다. 그냥 무손실 분해하자.
◆ 제 6정규형
명백한 결합 종속성만 남을때 까지 가능한 한 모든 결합 종속성을 제외한 상태의 정규형이다.
즉 속성이 개수가 0 또는 1이 될 때까지 무손실 분해가 된 상태이다.
이러한 릴레이션은 불필요한 결합이 많고 실용적이지 않으므로 실제 DB 설계에서는 이정도까지 정규화를 수행하지 않는다. 일반적으로 5NF까지 진행한다.
요약
이 장에서는 무손실 분해를 할 수 있는 상태를 나타내는 결합 종속성의 개념을 설명했다.
함수 종속성은 결합 종속성의 일종이다. 함수 종속성 이외의 명백하지도 암시적이지도 않은 결합 종속성을 제거하는 것이 4NF, 5NF의 정규화에 필요한 작업이다. BCNF까지 도달한 릴레이션은 후보키가 단일 속성으로 구성돼 있거나 키가 아닌 속성이 존재하지 않는 경우 자동으로 5NF의 요건을 만족하게 된다. 따라서 의도적으로 4, 5NF까지 정규화 할 일을 별로 없을 것이다.
5NF까지 도달하면 그 릴레이션은 중복이 없다고 할 수 있다. 또한, 그 이상 정규화해 6NF에 도달하면 불필요한 결합이 많아지므로 DB 설계에 관한 정규화 작업은 5NF까지 하는게 좋다.
'DB > 관계형 DB' 카테고리의 다른 글
도메인 설계 전략 (0) | 2021.01.19 |
---|---|
릴레이션 직교성 (0) | 2021.01.18 |
정규화 논리 (함수 종속성) #(제 1정규형 ~ 제 3+정규형) (0) | 2021.01.10 |
procedure (0) | 2020.12.29 |
mysql - CRUD 작업하기 (0) | 2020.12.28 |