티스토리 뷰
원래 정규화란 중복성을 최소화하고 정보의 일관성을 보장하기 위한 관계형 데이터 베이스에서 제일 중요한 개념인데요
제1정규화는
여러 값을 가진 컬럼이 존재할 수 없다. 즉 반복되는 그룹이 존재해서는 안 된다. 각 행과 열에는 하나의 값만이 올수 있다.
예를 들면
고객번호(P.K) 고객명 취미
1 이윤호영화 여행
2 이민호 등산
이런 테이블이 있을수는 없고 이걸 수정한다면
고객번호(P.K) 고객명
1 이윤호
2 이민호 하고 또하나
고객번호(P.K) 일련번호(P.K) 취미
1 1 영화
1 2 여행
2 1 등산
이런식으로 두개로 분리해야 한다는거죠
제2정규화
모든키가 아닌 컬럼은 기본 키 전체에 의존적이여야 한다. 기본키의 일부분에 의존적이어서는 안 된다.
예를 들어
사번(p.k) 프로젝트번호(p.k) 부서 프로젝트역할 고과율
1 a 전산 팀장 A
1 b 전산 조원 C
1 c 전산 부팀장 B
2 c 경리 팀장 A
3 c 기획 팀장 A
이 테이블의 기본키는 사번과 프로젝트번호인데 부서 컬럼은 사번에만 의존적이다.
이것은 2정규화를 거치면
사번(p.k) 프로젝트번호(p.k) 프로젝트역할 고과율
1 a 팀장 A
1 b 조원 C
1 c 부팀장 B
2 c 팀장 A
3 c 팀장 A
요렇게 하고 부서 테이블을 다시 따로 때네서
사번 부서
1 전산
2 경리
3 기획
요렇게 해서 릴레이션을 걸면 됩니다.
제3정규화
키가아닌 컬럼은, 다른 키가 아닌 컬럼에 의존적일어서는 안된다.
예를 들어
사번(p.k) 프로젝트번호(p.k) 프로젝트역할 고과율
1 a 팀장 A
1 b 조원 C
1 c 부팀장 B
2 c 팀장 A
3 c 팀장 A
요 테이블을 다시 보면 고과율은 프로젝트 역할에 의존적인걸 알수 있습니다.
이것을 또 3정규화 거치면
사번(p.k) 프로젝트번호(p.k) 프로젝트역할
1 a 팀장
1 b 조원
1 c 부팀장
2 c 팀장
3 c 팀장
프로젝트역할 고과율
팀장 A
조원 C
부팀장 B
요렇게 또 따로 때네줘야 합니다
BCNF 정규화는
3정규형에서 BCNF
비결정자에 의한 함수종속을 제거해서 분해된 BCNF
결과적으로 모든 속성들이 후보키로서 사용이 가능한 형태로 분해됩니다.
다시 말해 분해된 테이블의 모든 결정자들이 후보키이면
BCNF
제4정규화는
2정규화 된 테이블은 다대다 관계를 가질수 없다.
이건 따로 예를 안들어도 되겠죠?ㅋㅋ
제5정규화는 실무에서 정말 안쓴다고 알고 있습니다.
먼진상현님 블로그
http://park1020.tistory.com/entry/%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EC%A0%95%EA%B7%9C%ED%99%94-%EC%9A%94%EC%95%BD
'Database' 카테고리의 다른 글
RDB의 성능측면의 특징 (0) | 2009.12.07 |
---|---|
데이터 베이스 정규화(예시) (0) | 2009.05.01 |
[DB 이야기] 인덱스 이용하기. (0) | 2008.08.29 |