정규화과정

반응형
SMALL

정규화

  • 정규화는 테이블의 속성들이 상호종속적인 관계를 갖는 특성을 이용하여 테이블을 무손실 분해하는 과정이다.
  • 정규화의 목적은 가능한 한 중복을 제거하여 삽입, 삭제, 갱신 이상의 발생 가능성을 줄이는 것이다.
  • 정규형에는 제 1정규형(1NF), 제 2정규형(2NF), 제 3정규형(3NF), BCNF, 제 4정규형(4NF), 제 5정규형(5NF)이 있으며, 순서대로 정규화의 정도가 높아진다.

정규화 과정

아래의 <주문 목록> 테이블을 가지고 정규화 과정을 살펴 보자. <주문 목록> 테이블의 기본키(PRIMARY KEY)는 제품 번호이다.

<주문 목록>

제품 번호 제품명 재고 수량 주문 번호 고객 번호 주소 주문 수량

1001 모니터 2000 A345
D347
100
200
서울
부산
150
300
1007 마우스 9000 A210
A345
B230
300
100
200
광주
서울
부산
600
400
700
1201 키보드 2100 D347 200 부산 300

제 1 정규형

  • 제 1정규형은 테이블 R에 속한 모든 속성의 도메인이 원자 값만으로 되어 있는 정규형이다. 즉 테이블의 모든 속성 값이 원자 값으로만 되어 있는 정규형이다.
  • <주문목록> 테이블에서는 하나의 제품에 대해 여러 개의 주문 관련 정보(주문번호, 고객 번호, 주소, 주문 수량)가 발생하고 있다. 따라서 <주문목록> 테이블은 제 1 정규형이 아니다.

1. 제품 테이블 (Product Table)

제품 번호 제품명 재고 수량

1001 모니터 2000
1007 마우스 9000
1201 키보드 2100

2. 주문 테이블 (Order Table)

주문 번호 고객 번호 주소 제품 번호 주문 수량

A345 100 서울 1001 150
D347 200 부산 1001 300
A210 300 광주 1007 600
A345 100 서울 1007 400
B230 200 부산 1007 700
D347 200 부산 1201 300
  • 1차 정규화 과정으로 생성된 <제품 주문> 테이블의 기본키는 (주문 번호, 제품 번호)이고, 다음과 같은 함수적 종속이 존재한다.
    • 주문번호, 제품번호→고객번호, 주소, 주문 수량
    • 주문번호→고객번호, 주소
    • 고객번호→주소

제 2 정규형

  • 제 2 정규형은 테이블 R이 제 1정규형이고, 기본키가 아닌 모든 속성이 기본키에 대하여 완전 함수적 종속을 만족하는 정규형이다.
  • <주문 목록>테이블이 <제품> 테이블과 <제품 주문> 테이블로 무손실 분해되면서 모두 제 1정규형이 되었지만 그 중 <제품 주문> 테이블에는 기본키인 (주문번호, 제품번호)에 완전 함수적 종속이 되지 않는 속성이 존재한다. 즉, 주문 수량은 기본키에 대해 완전 함수적 종속이지만 고객번호와 주소는 주문 번호에 의해서도 결정 될 수 있으므로, 기본키에 대해 완전 함수적 종식이 아니다. 따라서 <제품 주문>테이블은 제 2정규형이 아니다.

1. 주문 테이블 (Order Table)

주문 번호 고객 번호 주소 제품 번호 주문 수량

A345 100 서울 1001 150
D347 200 부산 1001 300
A210 300 광주 1007 600
A345 100 서울 1007 400
B230 200 부산 1007 700
D347 200 부산 1201 300

2. 주문 테이블 (Order Table)

주문 번호를 기본키로 하고, 고객 번호와 주소를 저장합니다. 고객 번호와 주소는 주문 번호에 대해 종속됩니다.

주문 번호 고객 번호 주소

A345 100 서울
D347 200 부산
A210 300 광주
B230 200 부산

3. 주문 목록 테이블 (Order List Table)

주문 번호와 제품 번호를 복합키로 하고, 각 주문에서 주문된 제품과 그 수량을 저장합니다. 주문 수량은 (주문 번호, 제품 번호)에 완전 함수적 종속입니다.

주문 번호 제품 번호 주문 수량

A345 1001 150
D347 1001 300
A210 1007 600
A345 1007 400
B230 1007 700
D347 1201 300
  • 제 2 정규화 과정을 거쳐 생성된 <주문> 테이블의 기본키는 주문 번호이다. 그리고<주문> 테이블에는 아직도 다음과 같은 함수적 종속들이 존재한다.
    • 주문번호→고객번호, 주소
    • 고객번호→주소

제 3 정규형

  • 제 3 정규형은 테이블 R이 제 2 정규형이고 기본키가 아닌 모든 속성이 기본키에 대해 이행적 함수적 종속을 만족하지 않는 정규형이다.
  • <제품 주문> 테이블이 <주문 목록> 테이블과 <주문> 테이블로 무손실 분해되면서 모두 제 2정규형이 되었다. 그러나 <주문> 테이블에서 고객번화 주문번호에 함수적 종속이고, 주소가 고객 번호에 함수적 종속이므로 주소는 기본키인 주문 번호에 대해 이행적 함수적 종속을 만족한다. 즉 주문 번호 → 고객 번호이고, 고객 번호 → 주소 이므로 주문번호 → 주소는 이행적 함수적 종속이 된다. 따라서 <주문> 테이블은 제 3 정규형이아니다.

1. 주문 테이블 (Original Order Table)

주문 번호 고객 번호 주소

A345 100 서울
D347 200 부산
A210 300 광주
B230 200 부산

2. 주문 테이블 (Order Table)

주문 번호 고객 번호

A345 100
D347 200
A210 300
B230 200

3. 고객 테이블 (Customer Table)

고객 번호 주소

100 서울
200 부산
300 광주

BCNF

  • BCNF는 테이블 R에서 모든 결정자가 후보키인 정규형이다.
  • 일반적으로 제 3 정규형에 후보키가 여러 개 존재하고, 이러한 후보키들이 서로 중첩되어 나타나는 경우에 적용 가능하다.
  • 아래의 <수강_교수> 테이블 (제 3정규형)은 함수적 종속{(학번, 과목명)→담당교수,(학번, 담당교수)→ 과목명, 담당교수→ 과목명}을 만족하고 있다. <수강_교수> 테이블의 후보키는 (학번, 과목명)과 (학번, 담당 교수)이다.

<수강_교수>

학번 과목명 담당교수

211746 데이터베이스 홍길동
211747 네트워크 유관순
211748 인공지능 윤봉길
211749 데이터베이스 홍실동
211747 데이터베이스 이순신
211749 네트워크 유관순
  • <수강_교수> 테이블에서 결정자 중 후보키가 아닌 속성이 존재한다. 즉 함수적 종속 담당교수→과목명이 존재하는데, 담당 교수가 <수강_교수> 테이블에서 후보키가 아니기 떄문에 <수강_교수> 테이블은 BCNF가 아니다.

1. 수강 테이블 (Enrollment Table)

이 테이블은 학생이 어떤 과목을 수강했는지에 대한 정보를 기록합니다. 여기서 (학번, 과목명)은 후보키가 됩니다.

학번 담당교수

211746 홍길동
211747 유관순
211748 윤봉길
211749 홍실동
211747 이순신
211749 유관순

2. 교수 테이블 (Professor Table)

이 테이블은 각 교수님이 어떤 과목을 담당하고 있는지에 대한 정보를 기록합니다. 여기서 담당교수가 후보키가 됩니다.

담당교수 과목명

홍길동 데이터베이스
윤봉길 인공지능
이순신 데이터베이스
유관순 네트워크

제 4 정규형

  • 제 4 정규형은 테이블 R에 다중 값 종속 A→→ B가 존재할 경우 R의 모든 속성이 A에 함수적 종속 관계를 만족하는 정규형이다.
    • 다중 값 종속(다치 종속): A,B,C 3개의 속성을 가진 테이블 R에서 어던 복합 속성(A,C)에 대응하는 B값의 집합이 A 값에만 종속되고 C값에는 무관하면, B는 A에 다중 값 종속이라 하고, A →→B로 표기함

제 5 정규형

  • 제 5 정규형은 테이블 R의 모든 조인 종속이 R의 후보키를 통해서만 성립되는 정규형이다.
    • 조인 종속: 어떤 테이블 R의 속성에 대한 부분 집합 X,Y,…Z가 있다고 하자. 이때 만일 테이블 R이 자신의 프로젝션 X,Y,…Z를 모두 조인한 결과와 동일한 경우 테이블 R은 조인 종속 JD를 만족한다고 함

정규화 과정 정리

  • 비정규 릴레이선 →(도메인 원자값) →1NF(부분적 함수 종속 제거)→2NF(이행적 함수 종속 제거)→3NF(결정자이면서 후보키가 아닌 것 제거)→ BCNF(다치 종속 제거)→ 4NF(조인 종속성 이용)→5NF
  • 도보이결다조->두부이걸다줘?

반정규화

  • 반정규화는 시스템의 성능을 향상하고 개발 및 운영의 편의성 등을 높이기 위해 정규화된 데이터 모델을 의도적으로 통합, 중복, 분리하여 정규화 원칙을 위배하는 행위이다.
  • 반정규화를 수행하면 시스템의 성능이 향상되고 관리의 효율성은 증가하지만 데이터의 일관성 및 정합성이 저하될 수 있다.
  • 과도한 반정규화는 오히려 성능을 저하시킬수 있다.
반응형
LIST

'정보처리기사 > 데이터 입출력 구현' 카테고리의 다른 글

접근 통제 방식  (0) 2024.10.14
시스템 카탈로그 및 복구 방법  (0) 2024.10.14
관계  (5) 2024.10.13
데이터베이스 키(Key)와 제약조건  (1) 2024.10.13
릴레이션  (1) 2024.10.13