정규화의 개념과 이상 현상
이상(anomaly) 현상
이상(anomaly) 현상
- 불필요한 데이터 중복으로 인해 릴레이션에 대한 데이터 삽입, 수정, 삭제 연산을 수행할 때 발생할 수 있는 부작용
- 정규화는 이상 현상을 제거하면서 DB를 올바르게 설계해나가는 과정
이상 현상의 종류
- 삽입 이상: 새 데이터를 삽입하기 위해 불필요한 데이터도 함께 삽입해야 하는 문제
- 갱신 이상: 중복 투플 중 일부만 변경하여 데이터가 불일치하게 되는 모순의 문제
- 삭제 이상: 투플을 삭제하면 꼭 필요한 데이터까지 함께 삭제되는 데이터 손실 문제
정규화
정규화
- 이상 현상이 발생하지 않도록, 릴레이션을 관련 있는 속성들로만 구성하기 위해 릴레이션을 분해(decomposition)하는 과정
- 함수적 종속성을 판단하여 정규화를 수행함
함수적 종속성(FD; Functional Dependency)
- 속성들 관의 관련성
함수 종속
함수 종속
X -> Y
- "X가 Y를 함수적으로 결정한다." or "Y가 X에 함수적으로 종속되어 있다."
- X = 결정자, Y = 종속자
- 릴레이션 내의 모든 투플에서 하나의 X에 대한 Y값이 항상 하나
함수 종속 관계 판단 시 유의 사항
- 속성 자체의 특성과 의미를 기반으로 함수 종속성을 판단해야 함
- 일반적으로 기본키와 후보키는 릴레이션의 다른 모든 속성들을 함수적으로 결정함
- 기본키나 후보키가 아니어도 다른 속성 값을 유일하게 결정하는 속성은 함수 종속 관계에서 결정자가 될 수 있음
함수 종속의 종류
완전 함수 종속(FFD; Full Functional Dependency)
- 릴레이션에서 속성 집합 Y가 속성 집합 X에 함수적으로 종속되어 있지만, 속성 집합 X의 전체가 아닌 일부분에는 종속되지 않음을 의미
- 일반적으로 함수 종속은 완전 함수 종속을 의미
- ex. 당첨여부는 {고객아이디, 이벤트번호}에 완전 함수 종속됨
부분 함수 종속(PFD; Partial Functional Dependency)
- 릴레이션에서 속성 집합 Y가 속성 집합 X의 전체가 아닌 일부분에도 함수적으로 종속됨을 의미
- ex. 고객이름은 {고객아이디, 이벤트번호}에 부분 함수 종속됨 (고객아이디 -> 고객이름)
이행적 함수 종속(transitive FD)
- 릴레이션을 구성하는 3개의 속성 집합 X, Y, Z에 대해 함수 종속 관계 X → Y와 Y → Z가 존재하면 논리적으로 X → Z가 성립되는데, 이때 Z가 X에 이행적으로 함수 종속되었다고 함
기본 정규형과 정규화 과정
정규화 (normalization)
함수 종속성을 이용해 릴레이션을 연관성이 있는 속성들로만 구성되도록 분해해서, 이상 현상이 발생하지 않는 올바른 릴레이션으로 만들어 가는 과정
- 기본 목표 : 관련이 없는 함수 종속성은 별개의 릴레이션으로 표현
주의 사항: 정규화를 통해 릴레이션은 무손실 분해(nonloss decomposition)되어야 함
- 릴레이션이 의미상 동등한 릴레이션들로 분해되어야 하고, 분해로 인한 정보 손실이 발생하지 않아야 함
- 분해된 릴레이션들을 자연 조인하면 분해 전의 릴레이션으로 복원 가능해야 함
정규형(NF; Normal Form)
정규형 (Normal Form)
- 릴레이션이 정규화된 정도
- 각 정규형마다 제약 조건 존재 -> 정규형의 차수가 높아질수록 제약조건이 많아지고 엄격해짐
- 릴레이션의 특성을 고려해서 적합한 정규형 선택
기본 정규형
- 제 1 정규형
- 제 2 정규형
- 제 3 정규형
- BCNF (보이스/코드) 정규형
고급 정규형
- 제 4 정규형
- 제 5 정규형
정규화 과정
제 1정규형 (1NF; First Normal Form)
- 릴레이션의 모든 속성이 더는 분해되지 않는 원자 값(atomic value)만 가지면 제 1 정규형을 만족함
- 제 1 정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격을 갖춤
👉 릴레이션에 속한 모든 속성의 도메인이 원자 값으로만 구성되어 있으면 제1정규형에 속한다.
제 2정규형 (2NF)
- 릴레이션이 제 1 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제 2 정규형을 만족
- 1NF에서 부분 함수 종속을 제거하고 모든 속성이 기본키에 완전 함수 종속되도록 분해
👉 릴레이션이 제1정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형에 속한다.
제 3정규형 (3NF)
- 릴레이션이 제 2 정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제 3 정규형을 만족
- 2NF에서 모든 속성이 기본키에 이행적 함수 종속이 되지 않도록 분해
👉 릴레이션이 제2정규형에 속하고, 기본키가 아닌 모든 속성이 기본키에 이행적 함수 종속이 되지 않으면 제3정규형에 속한다.
보이스/코드 정규형(BCNF; Boyce/Codd Normal Form)
- 하나의 릴레이션에 여러 개의 후보키가 존재하는 경우, 제 3 정규형까지 모두 만족해도 이상 현상이 발생할 수 있음
- == 강한 제3정규형 (strong 3NF)
- 후보키를 여러 개 가지고 있는 릴레이션에 발생할 수 있는 이상 현상을 해결하기 위해 제 3 정규형보다 좀 더 엄격한 제약조건을 제시
- 보이스/코드 정규형에 속하는 모든 릴레이션은 제 3 정규형에 속하지만, 제 3 정규형에 속하는 모든 릴레이션이 보이스/코드 정규형에 속하는 것은 아님
👉 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키이면 보이스/코드 정규형에 속한다.
제 4정규형 (4NF)
- 릴레이션이 보이스/코드 정규형을 만족하면서, 함수 종속이 아닌 다치 종속(MVD; Multi Valued Dependency)을 제거하면 제 4 정규형에 속함
제 5정규형 (5NF)
- 릴레이션이 제 4 정규형을 만족하면서, 후보키를 통하지 않는 조인 종속(JD; Join Dependency)을 제거하면 제 5 정규형에 속함
정규화 시 주의 사항
- 모든 릴레이션이 제5정규형에 속해야만 바람직한 것은 아님
- 일반적으로 제3정규형이나 보이스/코드 정규형에 속하도록 릴레이션을 분해하여 데이터 중복을 줄이고 이상 현상을 해결하는 경우가 많음
'CS > 데이터베이스' 카테고리의 다른 글
10. 보안과 권한 관리 (1) | 2023.12.19 |
---|---|
9. 회복과 동시성 제어 (1) | 2023.12.02 |
7. 데이터베이스 설계 (1) | 2023.11.27 |
6. SQL 기본 문법 (1) | 2023.11.18 |
05. 관계 데이터 연산 (0) | 2023.11.09 |