관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화라고 한다.
각 로우마다 컬럼의 값이 1개만 존재해야함.
ex) 한 회원의 전화번호 칼럼에 여러개의 전화번호가 존재할수 없음.
회원ID | 이름 | 전화번호 |
---|---|---|
1 | 김모씨 | 010-7605-1003,010-3105-1111 |
2 | 박모씨 | 010-1234-1233 |
반복되는 그룹 속성이 존재할 수 없음. 여기서 반복되는 그룹속성이란 같은 성격과 내용의 칼럼이 연속으로 나타나는 것을 말함.
ex) 회원정보 테이블의 전화번호1, 전화번호2 속성
회원ID | 이름 | 전화번호1 | 전화번호2 |
---|---|---|---|
1 | 김모씨 | 010-7605-1003 | 010-3105-1111 |
2 | 박모씨 | 010-1234-1233 | null |
이를 해결하기 위해서는 회원정보 테이블과 전화번호 테이블을 따로 분리해야한다.
상품id | 주문id | 상품명 |
---|---|---|
1 | 2 | 아메리카노 |
1 | 1 | 아메리카노 |
여기서 상품명은 상품id와 주문id 중 주문id에만 종속되기 때문에 완전 함수정 종속이 되어야한다는 조건을 위배한다. 따라서 상품테이블과 주문테이블을 분리해야 한다.
토너먼트 | 연도 | 우승자 | 우승자 생년월일 |
---|---|---|---|
서울코딩대회 | 2012 | 아무개 | 920515 |
부산코딩대회 | 2013 | 김모씨 | 970103 |
경주코딩대회 | 2014 | 김수로 | 021104 |
여기서 후보키를 토너먼트와 연도라고 했을때 우승자 생년월일은 두키 중 어디에서 의존하지 않는다. 따라서, 토너먼트 테이블과 우승자 테이블을 따로 분리해야 한다.
제 3 정규화를 만족하지만, 키값이 칼럼에 의해 결정지어질때
학생 | 과목 | 교수 |
---|---|---|
1 | cmsc131 | Mr. Herald |
2 | cmsc131 | Mr. Herald |
3 | engl101 | Ms. Kim |
예시에서 후보키는 학생과 과목이다. 이때 Mr. Herald 교수가 과목명을 cmsc131에서 cmsc132로 바꾼다면 두 로우를 변경해야한다. 이처럼 과목명이 교수에 의해 결정되기 때문에, 이는 BCNF의 조건을 위배한다.
따라서, 학생 + 과목 테이블과 교수 + 과목 테이블로 테이블을 분리해야한다.