1. 성능 데이터 모델링
- DB 성능 향상을 위한 사항을 데이터 모델링에 반영하는 것
- 분석, 설계 시점에 수행해야 하고 이 시점이 늦어질수록 재업무 비용 증가
- 정규화는 반드시 수행해야 하고
- DB용량 산정, 트랜잭션 유형 파악을 통한 반정규화를 수행할 수도 있음
2. 함수적 종속성
- 정규화
- 데이터 분해 과정
- 이상현상 anomaly 제거
- 목표 : 테이블 간 중복된 데이터를 제거 → 무결성 Integrity 유지, 용량 축소
- 함수적 종속성 Functional Dependency;FD
- 테이블(릴레이션)에 속성 X, Y가 있다고 가정
- X 값을 알면 Y값을 식별할 수 있고, X값에 따라 Y값이 달라지는 경우; Y는 X에 함수적으로 종속된다고 함 ex) 학번 → 이름, 학번 → 나이, 학번 → 성별 (학번으로 모든 학생 튜플을 식별할 수 있으므로, 즉, 모든 속성들은 기본키에 함수적으로 종속됨)
- X : 결정자, Y: 종속자 | X → Y
- 종류
- 완전 함수적 종속 full functional dependency : 종속자가 기본키에 종속되는 경우 기본키가 복합키인 경우 기본키의 구성 속성 모두에 종속
- 부분 함수적 종속 partial functional dependency : 종속자가 기본키가 아닌 다른 속성에 종속되는 경우, 기본키가 복합키인 경우 기본키의 구성속성 중 일부에 종속되는 경우
- 이행적 함수 종속 transitive functional dependency : x→y, y→z 종속 관계가 있는 경우 x→z가 성립하는 경우
3. 정규화 이론
- 1,2,3차 정규화는 함수적 종속성과 관련됨
- 4차는 다치 종속을 제거
- 5차 정규화는 조인에 의한 이상현상을 제거
- 정규화 차수가 높아질수록 제약조건이 증가, 연산 시간 증가
- 정규화의 효과
- 입출력 데이터 양을 줄여 성능을 향상시킴
- 유연해짐 (high cohesion loose coupling)
- 개념이 세분화되어 재활용 가능성이 증가
- 데이터 중복 최소화 → 용량 아낌
- 반명, 과도한 정규화는 성능 저하를 유발할 수도 있음 조회 시 처리 조건에 따라 조인을 많이 해야돼서 cpu, 메모리 사용량이 늘수도 있음 → 반정규화필요
4. 제1 정규화
- 속성이 원자값 (atomic value)를 갖도록 테이블을 분해하는 것
5. 제2 정규화
- 제1 정규화가 된 테이블에 대해서 부분 함수 종속을 제거하고 완전 함수 종속을 만족하도록 테이블을 분해하는 것
- 기본키가 복합키인 경우, 구성 속성의 일부에 종속되는 속성이 있으면 안됨
- 예제
- 테이블 [ 학번 | 강의명 | 강의실 | 성적 ] 이렇게 있는 경우 학번 + 강의명이 기본키 → 성적 결정 그런데 강의명 → 강의실 이러한 종속성은 기본키의 부분집합을 결정자로 종속되는 속성이 있는 경우로, 이 부분 함수적 종속이 없어져야 한다. [ 강의명 | 강의실 ] + [ 학번 | 강의명 | 성적] 으로 테이블을 분리해야함
6. 제3 정규화
- 제2 정규화가 수행된 테이블에 대해서 이행적 종속을 없애도록 테이블을 분해하는 것
- 예제
- [ 강의아이디 | 강의명 | 교수명 ] 강의아이디로 강의명이 도출되고, 강의명으로 교수명이 도출된다. 그런데 강의아이디로 교수명을 도출할 수도 있다 [ 강의아이디 | 강의명 ] + [ 강의아이디 | 교수명 ] 으로 분해해야 함
7. 보이스코드 정규화 BCNF Boyce-Codd Normal Form
- 제3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 테이블을 분해하는 것
- 예제
- [ 학생번호 | 강의명 | 교수 ] 기본키 = 학생번호 + 강의명 데이터를 보고 일단 모든 종속을 찾는다. (학생번호 + 강의명 → 교수 / 교수 → 강의명) 이때 교수는 기본키도, 후보키도 아니다 그런데 결정자이므로 이걸 제거하겠다는 뜻 [ 학생 번호 | 교수 ] + [ 강의명 | 교수] 로 분해해야 함
8. 제4 정규화
- 다치 종속 제거
- BCNF를 만족한 테이블에서
- 예제출처: https://mozi.tistory.com/110
9. 제5 정규화
- 결합 종속 join dependency를 분리하는 과정
- 결합 종속 : 분해한 릴레이션을 결합하면 다시 원래의 릴레이션으로 돌아가는 것 (무손실 분해)
- → 즉, 별 의미가 없는 분래
'컴퓨터 공학 > 데이터베이스' 카테고리의 다른 글
SQLD) 데이터베이스 구조와 성능 (0) | 2022.01.07 |
---|---|
반정규화 De-normalization (0) | 2022.01.07 |
ERD (Entity Relationship Diagram) 기초 (0) | 2022.01.07 |
데이터 모델링의 이해 (0) | 2022.01.07 |
ELK) Logstash 기본 개념 (0) | 2021.12.27 |