record logo record

1. 정규화 탄생 배경

이러한 문제를 해결하기 위해 정규화 과정을 거치는 것 이다.

1-1. 갱신이상

2. 정규화 란

2-1. 정규화의 목적

  1. 불필요한 데이터(data redundancy)를 제거한다.
  2. 데이터 저장을 “논리적으로” 한다.

2-2. Bad 릴레이션은 무엇인가?

2-2-1. 함수적 종속성은 무엇인가?

2-3. 각각의 정규형에서 만족해야할 조건

  1. 분해의 대상인 분해 집합 D 는 무손실 조인 을 보장 해야 한다.
  2. 분해 집합 D 는 함수적 종속성을 보존 해야 한다.

3. 정규형

3-1. 제 1 정규형

예시

Student_name Age Subject
Adam 16 Biology, Maths
Alex 14 Maths
kevien 18 Maths

제 1 정규형 은 각 로우마다 컬럼의 값이 1개씩만 있어야 합니다. 이를 컬럼이 원자값(Atomic Value)를 갖는다고 합니다.

위의 경우 Adam의 Subject가 Biology와 Maths 두 개 이기 때문에 1차 정규형을 만족하지 못합니다. 만약 이를 만족 시키고 싶다면 아래와 같이 한 개의 로우를 더 만들면 됩니다.

Student_name Age Subject
Adam 16 Biology
Adam 16 Maths
Alex 14 Maths
kevien 18 Maths

결과적으로 제1 정규화를 함으로써 데이터 redundancy는 더 증가하였습니다. 데이터의 논리적 구성을 위해 이 부분을 희생하는 것 으로 볼 수 있습니다.

3-2. 제 2 정규형

예시

Student_name Age Subject
Adam 16 Biology
Adam 16 Maths
Alex 14 Maths
kevien 18 Maths


학생 정보 테이블-> Student_name Age Subject Table-> Student_name Subject
. Adam 16 . Adam Biology
. Alex 14 . Adam Maths
. kevien 18 . Alex Maths
. . . . kevien Maths

이를 해결하기 위한 방법은 위 처럼 테이블을 쪼개는 것 입니다. 그러면 두 테이블 모두 2차 정규형을 만족하게 됩니다.

위 테이블의 경우 삽입/갱신/삭제 이상을 겪지 않게됩니다. 하지만 조금 더 복잡한 테이블의 경우, 갱신 이상을 겪기도하는데 이를 해결하는 것이 바로 3차 정규화 입니다.

제 2 정규형을 만족했는데 이상현상이 있는 경우

제 2 정규형 에서도 이상현상이 있는 이유는 이행적 함수 종속이 존재하기 때문입니다. 이행적 함수 종속을 없애주는 과정이 제 3 정규화 입니다.

3-3. 제 3 정규형

X->Y, Y->Z 함수적 종속관계로 인해 X->Z의 이행적 함수적 종속관계가 나타나면 [X,Y], [Y,Z] 두 릴레이션으로 분해합니다.

예시

학생 테이블 -> Student_id Student_name DOB Street city State Zip
. . . . . . . .


Student_id Student_name DOB Zip
. . . .
Zip Street city State
. . . .

3차 정규화는 2차정규화와 마찬가지로 테이블을 분리함으로써 해결할 수 있는데, 위와 같이 두 개의 테이블(학생, 주소)로 나눔으로써 3차 정규형을 만족할 수 있습니다.

이를 통해 데이터가 논리적인 단위(학생, 주소)로 분리될 수 있고, 데이터의 redundancy도 줄었음을 알 수 있습니다.

3-4. BCNF(Boyce-Codd) 정규형

각 정규형은 그의 선행 정규형보다 더 엄격한 조건을 갖는다.

수많은 정규형이 있지만 관계 데이터베이스 설계의 목표는 각 릴레이션이 3NF(or BCNF)를 갖게 하는 것 이다.

예시

학생 과목 교수 학점
1 AB123 김첨지 A
2 CS123 빌게이츠 A
3 CS123 빌게이츠 A
교수 테이블-> 교수 과목 수강 테이블-> 학생 과목 학점
. 김첨지 AB123 . 1 AB123 A
. 빌게이츠 CS123 . 2 CS123 A
. 빌게이츠 CS123 . 3 CS123 A

4. 정규화의 장점/단점

4-1. 장점

4-2. 단점

조금 덧붙이자면, 정규화를 수행한다는 것 은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상을 제거 하는 것이다. 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과 가 있다. 따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.

5. 단점에서 미루어볼때 정규화는 언제 진행해야 하는가?

조희를 하는 SQL 문장에서 조인이 많이 발생하여 이로 인한 성능저하가 나타나는 경우반정규화 를 적용하는 전략이 필요하다.

5-1. 반정규화(De-normalization, 비정규화)

5-2. 반정규화의 대상?

5-3. 반정규화 과정에서 주의할 점은?

반정규화를 과도하게 적용하다 보면 데이터의 무결성이 깨질 수 있다. 또한 입력,수정,삭제의 질의문에 대한 응답 시간이 늦어질 수 있다.