제 3 정규화

- 기본키에 의존하지 않고 일반 칼럼에 의존하는 칼럼을 제거한다.

- PRIMARY KEY가 아닌 일반 COLUMN으로 종속되어지는 COLUMN 분리,

  A-> B, B-> C 그러므로 A -> C 

  즉, 이행적 종속 관계를 분리해준다


이전 포스팅 예제 참고(제2정규화) : http://hahahia.tistory.com/148

주문 Table(기본키 주문번호:FK)

주문번호

고객번호

주소 

A345 

100 

서울 

D347 

200 

부산 

A210 

300 

광주 

B230 

200 

부산 


--------------------------------------------------------------

주문번호 -> 고객번호, 주소

고객번호 -> 주소(일반 키에서 함수적 종속 발생!)

--------------------------------------------------------------

위 테이블에서 제3정규화를 하지않는 상태에서의 문제점

- 새로운 고객이 추가되어 삽입하려고 할 때(현재 주문번호는 FK) 실제 주문이 일어난 상황이 아니더라도 가상으로 주문을 해야만 삽입이 가능하게 된다.

- 즉 기본키가 아닌 속성인 고객번호에 의해서 주소가 결정되고, 주소로 주문번호를 검색할 수 있게 됨(이행적 함수 종속성)

따라서 위 테이블을 또 두 테이블로 나눌 수 있다


주문 Table

주문번호

고객번호 

A345 

100 

D347 

200 

A210 

300 

B230 

200 


고객 Table

고객번호

주소 

100

서울

200 

부산 

300 

광주 


그냥 쉽게 생각해서 기본키를 뺀 나머지 속성들의 함수적 종속성을 찾아내면 한번더 나누면 된다...

신고

'Database' 카테고리의 다른 글

제 3 정규화  (0) 2013.06.06
제 2 정규화  (0) 2013.06.06
제 1 정규화(Normal Form)  (1) 2013.06.06

제 2 정규화

- 기본키 2개 이상으로 구성되는 테이블에서 일부 속성에 대해서만 부분적으로 함수 종속적인 것을 분리

- 즉, 부분함수 종속성을 제거해 준다 (만약 기본키가 하나 인 경우 제2정규화는 하지 않는다)


ex) 이전 포스팅에서 제1 정규화를 시킨 테이블 두개를 봅시다.

관련링크 : http://hahahia.tistory.com/147


제품 Table

제품번호 

제품명 

재고수량 

1001 

모니터 

2000 

1007 

마우스 

9000 

1201 

키보드 

2100 


제품 주문 Table

 주문번호

제품번호 

고객번호 

주소 

주문수량 

A345 

1001

100

서울

150 

D347 

1001

200 

부산 

300 

A210 

1007 

300 

광주 

600 

A345 

1007 

100 

서울 

400 

B230 

1007 

200

부산 

700 

D347 

1201 

200 

부산 

300 


먼저 제품 Table에서는 제품번호 하나만이 유일한 고유키값을 가지기 때문에 해당사항이 없습니다 ㅎㅎ

하지만 제품 주문 Table에서 함수적 종속이 존재하는데요.

------------------------------------------------------------------------

주문번호, 제품번호 -> 고객번호, 주소, 주문수량 (기본키니깐 당연하죠)

주문번호 -> 고객번호, 주소(부분종속!!)

------------------------------------------------------------------------

즉 고객번호와 주소는 제품번호(기본키중 하나)를 몰라도 알 수 있기 때문에 데이터 중복이 발생하는 것 입니다. 예를 들어 주소를 서울에서 인천으로 하나만 수정하려고 해도 모두 바꾸어 주어야 하기 때문에 중복이 되는거죠.

따라서 제품 목록 Table은 또 두개의 Table로 나눠서 처리할 수 있습니다.


주문 목록 Table

주문번호 

제품번호 

주문수량 

A345 

1001 

150 

D347 

1001 

300 

A210 

1007 

600 

A345 

1007 

400 

B230 

1007 

700 

D347 

1201 

300 


주문 Table 

주문번호

고객번호

주소 

A345 

100 

서울 

D347 

200 

부산 

A210 

300 

광주 

B230 

200 

부산 


일단 제 2 정규화 끝.




신고

'Database' 카테고리의 다른 글

제 3 정규화  (0) 2013.06.06
제 2 정규화  (0) 2013.06.06
제 1 정규화(Normal Form)  (1) 2013.06.06

데이터베이스 공부를 하면서 중요한 개념이라 생각해서 포스팅합니다...


정규화(Normal Form)

- 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스

정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성

- 데이터 무결성 유지 및 안정성 최대화

- 제1정규형, 제2정규형, 제3정규형, BCNF 등이 있다(나머지 정규형은 잘 안쓰인다고 함..)


ex) 주문 목록 Table

 제품번호

제품명 

재고수량 

주문번호 

고객번호 

주소 

주문수량 

1001 

모니터

2000 

A345

100 

서울 

150 

1001 

모니터 

2000

D347 

200 

부산 

300 

1007 

마우스 

9000 

A210 

300 

광주 

600 

1007 

마우스 

9000 

A345 

100 

서울 

400 

1007 

마우스 

9000 

B230 

200 

부산 

700 

1201 

키보드 

2100 

D347 

200 

부산 

300 


제1정규형

- 테이블에 있는 모든 속성의 도메인이 원자값(Atomic Value)만으로 되어있는 정규형. 

반복되는 그룹 속성이 존재할 경우 그 그룹을 분리하여 새로운 Entity 타입을 추가한후 기존의 실체와 1:N의 관계를 형성해 준다(여기서는 제품명, 재고수량, 주문번호가 중복되네요)

- 그리고 위 테이블에서는 하나의 제품에 대해 여러 개의 주문 관련 정보(주문번호, 고객번호, 주소 ,주문수량) 발생

따라서 주문 목록 Table은 제1정규형이 아님.

제1정규형으로 고치게 된다면...


제품 Table

제품번호 

제품명 

재고수량 

1001 

모니터 

2000 

1007 

마우스 

9000 

1201 

키보드 

2100 


제품 주문 Table

 주문번호

제품번호 

고객번호 

주소 

주문수량 

A345 

1001

100

서울

150 

D347 

1001

200 

광주 

300 

A210 

1007 

300 

광주 

600 

A345 

1007 

100 

서울 

400 

B230 

1007 

200

부산 

700 

D347 

1201 

200 

부산 

300 

제품 주문 테이블에서 제품번호는 PK(Primary Key)이자 제품 Table의 FK(Foreign Key)가 됩니다. ㅎㅎ




신고

'Database' 카테고리의 다른 글

제 3 정규화  (0) 2013.06.06
제 2 정규화  (0) 2013.06.06
제 1 정규화(Normal Form)  (1) 2013.06.06
  1. 2017.05.30 15:49 신고

    거꾸로 아닙니까 마지막 줄 ? 제품 주문 테이블에서 제품번호는 제품 테이블의 프라이머리키이고 제품 주문 테이블에서는 외래키가 되는거죠

+ Recent posts

티스토리 툴바