일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Database
- nvmrc
- javascript
- gpt3.5turbo
- 클라우드
- gitlab
- 패키지설치에러
- gptapi
- ChatGPT
- 웹소켓연결
- chatGPTAPI
- nodejs
- git
- 버킷생성
- 웹소켓연결끊김
- aiapi
- 자바
- class
- 노드버전
- Github
- java
- 웹소켓재시작
- aws
- iam사용자
- openaiapi
- 호스팅영역
- db
- Express
- 클래스
- GPT3.5
- Today
- Total
IT's Jenna
4. 정규화 이론(두 번째) - 결합 종속성 본문
결합 종속성이란?
정규형 4NF - 6NF
1NF부터 BCNF까지 함수 종속성을 사용한 정규화는 명백하지 않은 함수 종속성을 모두 배제하고, 후보키가 되는 속성을 찾아내는 과정이었다. 다음 정규형 단계인 4NF부터 6NF까지는 결합 종속성을 사용하여 정규화한다.
1. 결합 종속성이란?
- 결합 종속성이란 키 자체에 다중성이 포함됐을 때 나타나는 중복을 의미한다.
- 결합 종속성은 무손실 분해를 할 수 있는 상태이다.
- 함수 종속성은 결합 종속성의 일종이다.
일반적으로 BCNF 정규화 단계까지 진행되면 자동적으로 5NF정규화 규칙을 만족한다. 하지만 특정한 경우에 함수 종속성은 만족하나 결합종속성을 만족하지 않는 경우가 있다. 바로 릴레이션에 키가 아닌 속성이 존재하지 않는 경우이다. 이 경우에는 다음 단계를 실행한다.
<제4 정규형(4NF)>
- 제4 정규형의 조건 : 다치 종속성을 갖지 않는다.
다치 종속성(MultiValued Dependency, MVD)이란 하나의 릴레이션에서 속성이 1:N 관계로 대응하는 것이다. 아래의 예시를 보자
- 학생은 n개의 학과와 n개의 동아리에 속할 수 있고, 이러한 관계를 다음과 같이 나타낸다.
- {이름} ->-> {학과}, {이름} ->-> {동아리}
- 위 형태의 릴레이션은 1NF의 규칙을 위반하기때문에 아래와 같이 테이블을 나눠준다.
- 해당 릴레에션은 BCNF 정규형은 만족하지만 키가 아닌 속성이 없다. 즉 {이름,학과,동아리}가 후보키 자체이다.
- 데이터의 중복으로 만약 원기가 동아리를 하나 더 가입하면 2개의 튜플이 추가되어야 하는 문제가 있다.
- 이름 : 학과, 이름 : 동아리 모두 1:n 관계이지만 둘 사이엔 아무런 관련이 없다. 독립된 관계가 하나의 릴레이션에 담겨있는 경우 데이터 중복이 발생한다.
해결방법
릴레이션을 독립된 관계끼리 무손실 분해하여 정규화한다.
<제5 정규형(5NF)>
- 제5 정규형의 조건 : 명확하지 않은 모든 결합 종속성을 배제한다.
제5 정규형이 실무적으로 사용하는 정규형의 최상위 단계이고, 이 이상은 릴레이션을 분해해도 의미가 없다고 본다. 4NF도 다치 결합 종속성이 배제된 경우이지만, 5NF와는 조합에 차이가 있다. 예를 들어, 위에서 언급한 동아리가 학과 동아리라고 생각해보자. 해당 동아리에는 특정 학과만 가입할 수 있다.
- 4NF의 경우에는 {이름, 학과}, {학과, 동아리} 두 가지로 분리했지만 본 경우에는 {동아리, 학과} 테이블을 추가해주어야 한다.
따라서 릴레이션 내에서 결합 종속성을 발견했을 땐, 내부 값에 따른 조합의 다양성도 염두에 두어야 한다.
결합 종속성을 이해하고 찾을 때, 4NF & 5NF에서 다루는 릴레이션은 모두 키가 아닌 속성을 가지지 않은 상태이고 무손실 분해를 하더라도 모두 키가 아닌 속성을 가지지 않는 릴레이션으로 나눠진다는 점에 유의하자!
<제6 정규형(6NF)>
- 제6 정규형의 조건 : 암시적 결합 종속성을 포함하여 모든 결합 종속성을 배제한다.
암시적 결합 종속성이란 슈퍼키로 분해할 수 있는 결합 종속성, 즉 공통의 후보키를 갖는 결합 종속성을 의미한다. 아래 예시를 보자.
- 릴레이션의 후보키는 {이름} 속성이다.
- 키가 아닌 속성을 가지고 있는 릴레이션은 같은 후보키를 가지고 있는 한 무손실 분해될 수 있다.
하지만 이런 경우는 필요 이상의 분해이고, 실제로 데이터를 사용해야 할 때 불필요하게 다시 결합해야 하는 경우들이 발생한다.
지금까지 데이터 베이스를 설계할 때 모순의 원인이 되는 중복을 제거하기 위한 정규화 방법을 알아보았다. 정규화 방법은 BCNF를 포함하여 7가지 정규형으로 구성되어 있고 5NF까지 도달하면 해당 릴레이션엔 중복이 없다고 할 수 있다. 그 이상의 과도한 정규화는 추천하지 않는다.
'Study > 관계형 데이터 베이스 실전 입문' 카테고리의 다른 글
7. NULL과의 싸움 (0) | 2021.06.01 |
---|---|
6. 도메인 설계 전략 (0) | 2021.05.28 |
5. 릴레이션의 직교성 (0) | 2021.05.27 |
3. 정규화 논리(첫 번째) - 함수 종속성 (0) | 2021.05.21 |
1. SQL과 관계형 모델 (0) | 2021.05.21 |