Recent Posts
Recent Comments
Link
11-22 00:01
Today
Total
관리 메뉴

삶 가운데 남긴 기록 AACII.TISTORY.COM

관계형 데이터베이스를 정규화해봅시다. 본문

DEV&OPS/Database

관계형 데이터베이스를 정규화해봅시다.

ALEPH.GEM 2022. 2. 25. 09:34

함수적 종속(Functional Dependency)

  1. X→ Y: X, Y가 속성의 부분 집합일 때, X 값이 항상 Y 값의 오직 하나만 연관 되어 있을 경우 함수적으로 종속되어있다고 합니다.
학번 이름 학년 학과
400 이순신 4 컴퓨터공학과
422 유관순 3 수학과
  1. (Determinant): 학번 → (Dependent): 이름, 학년, 학과

 

완전 함수적 종속과 부분 함수적 종속

수강 테이블

학번 과목번호 성적 학년
100 c413 a 4
100 e412 b 4
  1. 학번, 과목번호 → 성적
  2. 학번 → 학년
  3. 성적은 (학번, 과목번호)에 완전 함수적 종속(Functional Dependency)입니다.
  4. 학년은 (학번, 과목번호)에 부분 함수적 종속(Partial Functional Dependency)이다. 학년은 학번에만 종속 되기 때문입니다.

 

정규화

  1. 1NF: 원자 값(속성 값이 1개)으로 구성된 도메인을 제1정규형이라고 합니다.
  2. 2NF: 부분 함수 종속이 제거된 완전 함수 종속인 릴레이션을 제2정규형이라고 합니다. 복합키가 아닌 경우 2정규화 대상이 되지 않습니다. 복합키 일부에 의존적인 속성이 있다면 제거 해야 합니다.
  3. 3NF: 이행 함수 종속이 제거된, 키가 아닌 속성들은 모두 기본키에 종속인 릴레이션을 3정규형이라 합니다.
  4. BCNF: 3NF 중 모든 결정자(determinant)가 후보키인 릴레이션을 말합니다.
  5. 4NF: 다치 종속(Multi Valued Dependency: (a,c) → b 에서 b가  a에는 종속되지만 c에는 무관하면 b는 a에 다치 종속이라 한다. )이 제거된 릴레이션을 말합니다.
  6. 5NF: 모든 조인종속(조인 결과가 원래 것과 동일 함)은 후보키를 통해서만 성립하는 경우를 말합니다.

 

정규화 과정

  • 비정규 릴레이션: 주문목록(기본키: 제품 번호)
제품번호 제품명 재고수량 주문번호 고객번호 주소 주문수량
1001 모니터 2000 a345
d347
100
200
서울
부산
150
300
1007 마우스 9000 a210
a345
b230
300
100
200
광주
서울
부산
600
400
700
1201 키보드 2100 d347 200 부산 300

❋1NF: 원자 값(1개)이 아닌 속성들을 분해합니다.

 

  • 제품 테이블(1NF)
제품번호 제품명 재고수량
1001 모니터 2000
1007 마우스 9000
1201 키보드 2100

 

  • 제품 주문 테이블(1NF)
주문번호 제품번호 고객번호 주소 주문수량
a345 1001 100 서울 150
d347 1001 200 부산 300
a210 1007 300 광주 600
a345 1007 100 서울 400
b230 1007 200 부산 700
d347 1201 200 부산 300

기본키:(주문번호, 제품번호) → 고객번호, 주소, 주문수량

주문번호 → 고객번호, 주소

고객번호 → 주소

❋ 고객번호와 주소가 복합키의 일부(주문번호)에 종속되므로 분해합니다.

 

  • 주문 목록(2NF)
주문번호 제품번호 주문수량
a345 1001 150
d347 1001 300
a210 1007 600
  • 주문(2NF)
주문번호 고객번호 주소
a345 100 서울
d347 200 부산

기본키: 주문번호 → 고객번호, 주소

고객번호 → 주소

❋주문번호 → 고객번호→ 주소: 이행적 함수 종속이 존재하므로 분해합니다.

 

  • 주문(3NF)
주문번호 고객번호
a345 100
d347 200
  • 고객(3NF)
고객번호 주소
100 서울
200 부산

 

  • 수강 교수 테이블(3NF)
학번 과목명 담당교수
123456 데이터베이스 홍길동
654789 네트워크 유관순
963258 인공지능 윤봉길

(학번, 과목명) → 담당교수

(학번, 담당교수) → 과목명

담당교수 → 과목명

후보키: (학번, 과목명), (학번, 담당교수)

❋ 담당교수 → 과목명 이라는 함수적 종속에서 담당교수 속성이 후보키가 아니라서 분해한다.

 

  • 수강(BCNF)
학번 담당교수
123456 홍길동
654789 유관순
963258 윤봉길

 

  • 교수(BCNF)
담당교수 과목명
홍길동 데이터베이스
윤봉길 인공지능
유관순 네트워크

 

728x90

'DEV&OPS > Database' 카테고리의 다른 글

MySQL 테이블 복사 (구조 및 데이터)  (0) 2022.05.13
MySQL ibtmp1 파일 용량, Gerneral_log 파일 용량  (0) 2022.04.20
MYSQL 날짜 비교  (0) 2021.10.07
MySQL 권한 부여/회수  (0) 2021.08.26
MySQL 이벤트 스케줄러  (0) 2021.08.24