Skip to content

Latest commit

 

History

History
114 lines (86 loc) · 3.39 KB

Normalization.md

File metadata and controls

114 lines (86 loc) · 3.39 KB

정규화(Normalization)이란?

정의

  • 이상현상이 발생할만한 데이터베이스를 열이나 별개의 테이블로 분해하는 것
  • 정규화 단계가 높아질 수록 이상현상은 점차 줄어들게 됨

역할

  • 데이터베이스 변경 시 발생할 수 있는 이상현상 감소
  • 새로운 데이터 형의 추가로 인한 확장시 원래의 구조를 변경하지 않거나 변경점 최소화 가능
  • 데이터베이스에 연동된 응용프로그램에 끼치는 영향을 최소화함

제 1 정규형 (1NF)

정의

  1. 각 칼럼에 해당하는 칸에는 하나의 속성값만 들어가야함
  2. 하나의 컬럼에는 같은 타입의 속성값으로 통일되어야한다.
  3. 각 칼럼의 이름들이 중복되면 안 된다.

예시

학생ID 이름 수강과목
001 김씨 국어, 수학
002 이씨 영어
003 박씨 과학

위 테이블을 보면 하나의 칼럼에 두 개의 속성값이 들어가있는 것을 볼 수 있다.
즉, 제 1 정규형을 위반. 아래처럼 만들어야함

학생ID 이름 수강과목
001 김씨 국어
001 김씨 수학
002 이씨 영어
003 박씨 과학

제 2 정규형 (2NF)

정의

  1. 모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 한다
  2. 즉, 후보키 k와 K에 속하지 않는 속성 A가 있을 때, A를 결정하기 위해 K의 일부가 아닌 K전체를 참조해야만 하는 경우

예시

학생ID 수강과목 담당교수 점수
101 국어 A 90
102 수학 B 70
103 수학 B 80
104 과학 C 80

위 경우 점수는 수강과목 담당 교수에 의해 결정되는 값이 아님 고로 위 테이블은 분할이 가능

학생ID 점수 수강과목 수강과목 담당교수
101 90 국어 국어 A
102 70 수학 수학 B
103 80 수학 과학 C
104 80 과학

제 3 정규형 (3NF)

정의

  1. 이행종속성이 없어야 한다.
  2. 즉, A -> B, B -> C 이어서 A -> C가 추론되는 관계가 아니어야 한다.

예시

고객코드 등급 할인율
101 Bronze 10%
102 Silver 20%
103 Gold 30%
104 VIP 40%

고객 코드를 보면 등급을 알 수 있고, 등급을 보면 할인율을 알 수 있음
즉, 이행종속성이 위반되므로 테이블을 나눠야한다.(기본키 -> 기본키 -> 속성값)

고객코드 등급 등급 할인율
101 Bronze Bronze 10%
102 Silver Silver 20%
103 Gold Gold 30%
104 VIP VIP 40%

BCNF (Boyce-Codd Normal Form)

정의

  1. 모든 결정자가 후보키 집합에 속함
  2. 제 3정규형을 조금 더 강화한 버전
  3. 즉, 후보키 집합에 없는 칼럼이 결정자가 되어서는 안 된다는 뜻

예시

위 경우, 동일한 과목을 가르치는 교수들이 존재 그러므로 아래와 같이 분할해야함

4,5 정규형을 잘 쓰지 않는 이유

  • Join 연산이 많아짐
  • 질의에 대한 응답 속도가 느려질 수 있음
  • 즉, 반정규성이 나타날 수 있음

참고 문서

코드연구소