이상현상이 발생할만한 데이터베이스를 열이나 별개의 테이블로 분해하는 것
정규화 단계가 높아질 수록 이상현상은 점차 줄어들게 됨
데이터베이스 변경 시 발생할 수 있는 이상현상 감소
새로운 데이터 형의 추가로 인한 확장시 원래의 구조를 변경하지 않거나 변경점 최소화 가능
데이터베이스에 연동된 응용프로그램에 끼치는 영향을 최소화함
각 칼럼에 해당하는 칸에는 하나의 속성값만 들어가야함
하나의 컬럼에는 같은 타입의 속성값으로 통일되어야한다.
각 칼럼의 이름들이 중복되면 안 된다.
학생ID
이름
수강과목
001
김씨
국어, 수학
002
이씨
영어
003
박씨
과학
위 테이블을 보면 하나의 칼럼에 두 개의 속성값이 들어가있는 것을 볼 수 있다.
즉, 제 1 정규형을 위반. 아래처럼 만들어야함
학생ID
이름
수강과목
001
김씨
국어
001
김씨
수학
002
이씨
영어
003
박씨
과학
모든 컬럼이 부분적 종속(Partial Dependency)이 없어야 한다
즉, 후보키 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
과학
이행종속성이 없어야 한다.
즉, 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)
모든 결정자가 후보키 집합에 속함
제 3정규형을 조금 더 강화한 버전
즉, 후보키 집합에 없는 칼럼이 결정자가 되어서는 안 된다는 뜻
위 경우, 동일한 과목을 가르치는 교수들이 존재
그러므로 아래와 같이 분할해야함
Join 연산이 많아짐
질의에 대한 응답 속도가 느려질 수 있음
즉, 반정규성이 나타날 수 있음
코드연구소