삶 가운데 남긴 기록 AACII.TISTORY.COM
관계형 데이터베이스를 정규화해봅시다. 본문
함수적 종속(Functional Dependency)
- X→ Y: X, Y가 속성의 부분 집합일 때, X 값이 항상 Y 값의 오직 하나만 연관 되어 있을 경우 함수적으로 종속되어있다고 합니다.
학번 | 이름 | 학년 | 학과 |
400 | 이순신 | 4 | 컴퓨터공학과 |
422 | 유관순 | 3 | 수학과 |
- (Determinant): 학번 → (Dependent): 이름, 학년, 학과
완전 함수적 종속과 부분 함수적 종속
수강 테이블
학번 | 과목번호 | 성적 | 학년 |
100 | c413 | a | 4 |
100 | e412 | b | 4 |
- 학번, 과목번호 → 성적
- 학번 → 학년
- 성적은 (학번, 과목번호)에 완전 함수적 종속(Functional Dependency)입니다.
- 학년은 (학번, 과목번호)에 부분 함수적 종속(Partial Functional Dependency)이다. 학년은 학번에만 종속 되기 때문입니다.
정규화
- 1NF: 원자 값(속성 값이 1개)으로 구성된 도메인을 제1정규형이라고 합니다.
- 2NF: 부분 함수 종속이 제거된 완전 함수 종속인 릴레이션을 제2정규형이라고 합니다. 복합키가 아닌 경우 2정규화 대상이 되지 않습니다. 복합키 일부에 의존적인 속성이 있다면 제거 해야 합니다.
- 3NF: 이행 함수 종속이 제거된, 키가 아닌 속성들은 모두 기본키에 종속인 릴레이션을 3정규형이라 합니다.
- BCNF: 3NF 중 모든 결정자(determinant)가 후보키인 릴레이션을 말합니다.
- 4NF: 다치 종속(Multi Valued Dependency: (a,c) → b 에서 b가 a에는 종속되지만 c에는 무관하면 b는 a에 다치 종속이라 한다. )이 제거된 릴레이션을 말합니다.
- 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 |