설계의 예
잘못된 설계로 인한 이상(Anomaly)
- 삭제 이상(deletion anomaly)
- 연쇄 삭제(triggered deletion)를 유발
e.g. 200번 학생이 'C123' 과목 등록을 취소 → 200번 학생의 학년정보 소실 - 하나의 정보(데이터)를 삭제하면 다른 정보(데이터)도 같이 사라짐
- 연쇄 삭제(triggered deletion)를 유발
- 삽입 이상(insertion anomaly)
- 학번이 600번, 이름이 홍길동, 2학년, 전기과인 학생 정보(투플)를 삽입
e.g. insert into 수강 values (600, 'NONE', 'N', 2, '홍길동', '전기')
→ 불필요한 정보(임시과목번호)를 채워서 삽입해야 함
- 학번이 600번, 이름이 홍길동, 2학년, 전기과인 학생 정보(투플)를 삽입
- 갱신 이상(update anomaly)
e.g. 400번 '송병길'의 학년을 4에서 3으로 변경 → 4개의 투플을 모두 갱신해야함- 하나의 속성값을 변경하려면 여러 개의 투플을 갱신해야 함
정규화의 필요성
- Anomaly가 발생한 이유
- 상이한 종류의 정보를 하나의 릴레이션으로 표현했기 때문!
- 속성들 사이에 존재하는 종속관계(의존관계)를 인식하지 못하고 무리하게 하나의 릴레이션으로 표현
- 데이터의 중복을 발생시킴
- 상이한 종류의 정보를 하나의 릴레이션으로 표현했기 때문!
- 정규화(Normalization)
- 속성들 간의 종속관계별로 별도의 릴레이션으로 분해(decomposition)하는 과정 → 스키마 변환(schema transformation)
- 동등한 정보를 나타낼 수 있으면서 더 좋은 스키마로 변환!
- 속성들 간의 종속관계별로 별도의 릴레이션으로 분해(decomposition)하는 과정 → 스키마 변환(schema transformation)
릴레이션 분해의 원리
- 정보 표현의 무손실(lossless representation of information)
- 변환된 스키마는 변환 전 스키마의 정보를 모두 표현할 수 있어야 하고 구조적으로는 더 바람직해야 함
- 무손실 분해(lossless/non-loss decomposition)
- 최소의 데이터 중복성(minimal data redundancy)
- 중복으로 인한 anomaly를 제거
- 분리의 원칙(principle of separation)
- 속성들 간의 의존성별로 별도의 릴레이션으로 분리해 표현해야 함
함수 종속(FD: Functional Dependency)
- 릴레이션 내의 속성 X와 Y에 대해
- 시간에 관계 없이 속성 X의 값에 대해 Y의 값이 오직 하나만 연관됨
- 함수 종속 관계는 릴레이션이 계속해서 변경되더라도 항상 지켜지는 의미적 관계여야 함
- 어느 한 순간의 릴레이션 투플들만을 근거로 판단하는 것은 아님
함수 종속의 예 (학생 릴레이션)
학번 → 이름
학번 → 학년
학번 → 학과
또는
학번 → (이름, 학년, 학과)
{학번, 과목번호} → 성적 -- 완전 함수 종속
학번 → 학년
{학번, 과목번호} → 학년 -- 부분 함수 종속
제1정규형(1NF: First Normal From)
- 릴레이션 R에 속한 모든 도메인이 원자 값으로만 되어 있는 릴레이션
- 릴레이션 모델을 따르는 릴레이션은 기본적으로 만족함
제1정규형을 만족하는 릴레이션의 예
강의 자료 참고
제2정규형(2NF: Second Normal Form)
- 릴레이션 R이 1NF이고, 기본키에 속하지 않은 속성은 모두 기본키에 완전 함수 종속임
여전히 남아있는 Anomalies
강의 자료 참고
제3정규형(3NF)
- 릴레이션 R이 2NF이고 기본키에 속하지 않은 모든 속성이 기본키에 이행적 함수 종속이 아닌 경우
3NF의 문제점
- 아래의 경우에는 적용하기 곤란
- 복수의 후보키를 가지고
- 후보 키들이 두 개 이상의 속성으로 구성되고
- 후보 키의 속성들이 서로 중첩되는 경우
보이스코드 정규형(BCNF)
- Boyce/Codd Normal Form
- 릴레이션 R의 결정자가 모두 후보키임
- 3NF보다 단순
3NF이나 BCNF는 아닌 예
강의 자료 참고
정규형 간의 관계
1NF ⊃ 2NF ⊃ 3NF ⊃ BCNF ⊃ 4NF ⊃ 5NF(PJ/NF)
정규화의 수준
- 모든 릴레이션이 5NF를 만족할 필요는 없음
- 정규화의 수준은 데이터베이스 설계자가 선택
낮은 정규화 수준 | 높은 정규화 수준 | |
데이터 중복 | High | Low |
데이터 중복으로 인한 Anomaly | High | Low |
질의 실행 속도 | 대체로 Fast | 대체로 Slow (join이 필요할 수 있기 때문) |
정규화 수준이 낮은 릴레이션은 높은 릴레이션들의 join
'데이터베이스 Database' 카테고리의 다른 글
Chapter 9 데이터베이스 설계 (0) | 2020.12.05 |
---|---|
Chapter 8 ER 모델 ✍ (0) | 2020.11.16 |
Chapter 6 SQL - JDBC를 이용한 자바응용프로그램 개발 (0) | 2020.11.05 |
Chapter 6 SQL - 트리거 Trigger (0) | 2020.10.26 |
Chapter 6 SQL - 함수 Function (0) | 2020.10.26 |