1. 정규화(Normalization)
1) 정규화(Normalization)의 개념
- 정규화는 데이터의 일관성, 최소한의 데이터 중복, 최대한의 데이터 유연성을 위한 방법이며 데이터를 분해하는 과정입니다.
- 데이터의 중복을 제거하고 데이터 모델의 독립성을 확보하기 위한 방법이기도 합니다.
- 테이블을 분해해서 데이터 중복을 제거하기 때문에 데이터 모델의 유연성을 높입니다.
- 정규화를 수행하면 비즈니스에 변화가 발생하여도 데이터 모델의 변경을 최소화할 수 있습니다.
- 정규화는 제1정규화부터 제5정규화까지 있지만, 실질적으로는 제3정규화까지만 수행을 합니다.
- 위의 테이블을 정규화를 수행하지 않은 것입니다.
- 회원테이블과 등급테이블을 하나로 합쳐서 지금 보고 있습니다.
- 만약 위의 테이블에서 새로운 회원이 추가되는 경우 등급정보가 없다면 등급코드를 임의의 값을 넣어야 합니다.
- 즉, 불필요한 정보가 같이 추가되는 것입니다.
- 그리고 회원등급에 브론즈 등급이 없었는데 추가해야는데 아직 회원이 없다면 회원 정보가 없기 때문에 임의의 값으로 회원ID를 입력하거나 추가할 수 없게 됩니다.
- 이러한 문제를 이상현상(Anomaly)라고 합니다.
- 위와 같은 문제를 해결하려면 테이블을 분해해야 합니다.
- 위 그림처럼 분해하면 됩니다.
- 정규화된 모델은 테이블이 분해됩니다.
- 테이블이 분해되면 회원테이블과 등급테이블 간에 등급코드로 조인(Join)을 수행하여 하나의 합집합으로도 만들 수 있습니다.
- 정규화를 수행하면 불필요한 데이터를 입력하지 않아도 되기 때문에 중복 데이터가 제거됩니다.
2) 정규화 절차
정규화절차 | 설명 |
제1정규화 | - 속성(Attribut)의 원자성을 확보한다. - 기본키(Primary Key)를 설정한다. |
제2정규화 | - 기본키가 2개 이상의 속성으로 이루어진 경우, 부분 함수 종속성을 제거(분해)한다. |
제3정규화 | - 기본키를 제외한 칼럼 간에 종속성을 제거한다.(이행 함수 종속성 제거) |
BCNF | - 기본키를 제외하고 후보키가 있는 경우, 후보키가 기본키를 종속시키면 분해한다. |
제4정규화 | - 여러 칼럼들이 하나의 칼럼을 종속시키는 경우 분해하여 다중값 종속성을 제거한다. |
제5정규화 | - 조인에 의해서 종속성이 발생되는 경우 분해한다. |
## 이론 문제 확인하기
다음 중 제3정규화와 관련되어 있는 것은?
1. 속성의 원자성
2. 부분 함수의 종속성
3. 이행 함수의 종속성
4. 다치 함수의 종속성
정답 : 3
- 제 3정규화와 관련 있는 것은 이행 함수의 종속성입니다.
2. 함수의 종속성(Functional Dependency)
1) 제1정규화
- 정규화는 함수적 종속성을 근거로 합니다.
- 함수적 종속성이란 A → B이면, B는 A에 함수적으로 종속된다고 말합니다.
- 함수적 종속성은 A가 변화되면, B도 변화하는지 확인합니다.
- 위 그림으로 보면 회원ID가 변화하면 이름과 전화번호도 변경될 겁니다.
- 이런 경우는 회원ID가 기본키가 되고, 회원ID가 이름을 함수적으로 종속한다고 합니다.
- A를 예매테이블이라고 보겠습니다.
- 위의 예에서는 예매번호만으로는 유일성을 만족하지 못한다고 가정한 것입니다.
- 그래서 예매번호와 회원ID를 기본키로 잡은 것입니다.
- 이렇게 기본키를 잡는 것이 제1정규화입니다.
2) 제2정규화
- 부분함수종속석이란, 기본키가 2개 이상의 칼럼으로 이루어진 경우에만 발생합니다.
- 기본키가 하나의 컬럼으로 이루어지면 제2정규화는 생략합니다.
- 위 그림을 보면 기본키에 있는 회원ID가 변경되면 이름과 전화번호도 변경됩니다.
- 회원ID가 이름과 전화번호를 종속하고 있는 것입니다.
- 바로 이렇나 경우를 부분 함수 종속성이라고 합니다.
- 부분 함수 종속성이 발생하면 분해를 해야 합니다.
- 부분함수 종속성을 제거하면 위와 같습니다.
- 회원이라는 새로운 테이블을 도출디고, 회원ID가 기본키가 됩니다.
3) 제3정규화
- 제3정규화는 이행 함수 종속성을 제거합니다.
- 이행 함수 종속성이란, 기본키를 제외하고 칼럼 간에 종속성이 발생하는 것을 말합니다.
- 제3정규화는 제1정규화와 제2정규화를 수행한 다음에 해야 합니다.
- 위처럼 영화명이 영화코드에 종속되는 것을 이행함수 종속성이라고 합니다.
- 영화는 영화명 말고도 관련된 속성이 많기 때문에 영화코드에 묶기게 됩니다.
- 제3정규화를 처리하면 위처럼 영화테이블이 도출이 되고, 영화코드가 기본키가 됩니다.
4) BCNF(Boyce-Codd Normal Form)
- BCNF는 복수의 후보키가 있고, 후보키들의 복합 속성이 있어야 하며, 서로 중첩되어야 합니다.
- 위 그림처럼 기본키(학번, 과목번호)가 교수를 함수적으로 종속하고 있습니다.
- 이때 교수가 후보키(최소성과 유일성 만족)이고, 교수가 과목번호를 함수적으로 종속하는 경우 분해가 일어납니다.
- 위와 같은 경우는 교수테이블을 새롭게 만들고, 기본키는 교수로 하고 칼럼은 과목번호가 됩니다.
- 이러한 작업은 BCNF라고 합니다.
## 이론 문제 확인하기
정규화 과정에서 주식별자와 관련성이 가장 낮은 것은?
1. 제1정규화
2. 제2정규화
3. 제3정규화
4. BCNF
정답 : 3
- 제3정규화는 주식별자를 제외한 컬럼 간의 종속성을 확인해서 종속성이 있으면 분해하는 과정입니다.
'자격증 > SQLD 자격증' 카테고리의 다른 글
[SQLD자격증강좌] 10강 반정규화(De-Normalization) - 오쌤의 니가스터디 (0) | 2024.03.08 |
---|---|
[SQLD자격증강좌] 9강 정규화의 문제점과 성능 - 오쌤의 니가스터디 (0) | 2024.03.08 |
[SQLD자격증강좌] 7강 엔터티 식별자 - 오쌤의 니가스터디 (0) | 2024.03.07 |
[SQLD자격증강좌] 6강 관계(RelationShip) - 오쌤의 니가스터디 (0) | 2024.03.07 |
[SQLD자격증강좌] 4강 엔터티(Entity) - 오쌤의 니가스터디 (0) | 2024.03.06 |