-
정규화💻 computer science/📦 database 2022. 10. 5. 01:41
정규화 ❗
💡 릴레이션 간의 잘못된 종속 관계로 인한 데이터베이스 이상 현상 을 해결하거나,
저장 공간을 효율적으로 사용하기 위해 릴레이션을 여러 개로 분리하는 과정테이블간 데이터 중복을 줄이고, 중복된 데이터를 허용하지 않음으로 써
무결성을 향상(유지)하고, DB의 저장 용량도 줄인다.
데이터베이스 이상 현상 (Anomaly)
- 서로 공유하는 데이터임에도 불구하고 각자의 튜플에 독립적으로 존재하기 때문에 발생
- 삽입 이상
- 데이터 삽입시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
- 수정 이상
- 데이터 수정시 중복된 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상
- 삭제 이상
- 데이터 삭제시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
정규화 원칙
- 자료의 중복성은 감소해야 한다.
- 독립적인 관계는 별개의 릴레이션으로 표현해야 한다.
- 각각의 릴레이션은 독립적인 표현이 가능해야 한다.
제 1정규화
테이블의 컬럼이 원자 값(atomic value) 만으로 구성되도록 테이블을 분해
- 릴레이션의 모든 도메인이 더 이상 분해되지 않는 원자 값으로만 구성
- 한 개의 기본키에 대해 두 개 이상의 값을 가지는 반복 집합이 있어서는 안된다.
제 2정규화
릴레이션이 1 정규형이며 부분 함수의 종속성을 제거한 형태
부분 함수의 종속성 제거
- 기본키가 아닌 모든 속성이 기본키에 완전 함수 종속
기본키의 부분집합이 결정자가 되어서는 안된다.
- 기본키가 복합키(키1, 키2)로 묶여있을 때, 두 키중 하나의 키만으로 다른 컬럼을 결정지을 수 있으면 안된다.
⚠️ 주의 점
- 릴레이션을 분해할 때 동등한 릴레이션으로 분해해야 한다.
- 정보 손실이 발생하지 않는 무손실 분해로 분해되어야 한다.
제 3정규화
제 2정규형이고 기본키가 아닌 모든 속성이 이행적 함수 종속(transitive FD) 을 만족하지 않는 상태
이행적 함수 종속
- A → B 와 B → C가 존재하면 논리적으로 A → C 가 성립
- 이때, 집합 C가 집합 A에 이행적으로 함수 종속 되었다고 한다.
BCNF (보이스/코드 정규형)
제 3정규형이고, 결정자가 후보키가 아닌 함수 종속관계를 제거하여 릴레이션의 함수 종속 관계에서 모든 결정자가 후보키인 상태
결정자
- 함수 종속 관계에서 특정 종속자를 결정짓는 요소
- X → Y 일때, X는 결정자, Y는 종속자
장점 / 단점
장점
- 데이터의 중복을 줄임
- 이상 문제를 해결
- 무결성 유지
- 데이터 모델 단순화
단점
- 정규화를 할 수록 테이블이 분해된다.
- 조회를 위해 조인이 많이 발생한다.
- 이로 인해 성능이 저하될 수 있다 (질의에 대한 응답이 느려진다)
- 비정규화 과정이 발생할 수 있다.
참고 자료
'💻 computer science > 📦 database' 카테고리의 다른 글
📂 MySQL - 트랜잭션 격리 수준 (0) 2024.05.11 인덱스 (0) 2022.10.05 SQL / NoSQL (1) 2022.10.05 트랜잭션 (1) 2022.10.05 데이터베이스 기본 (1) 2022.10.05