-
[Database] 정규화CS/DataBase 2023. 9. 5. 18:38
데이터베이스에서 중요하게 쓰이는 개념인 정규화에 대해 정리하려고 합니다.
정규화 : 이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정
이상현상이 존재하는 릴레이션을 분해하여 여러 개의 릴레이션을 생성하게 된다.
이를 단계별로 구분하여 정규형이 높아질수록 이상현상은 줄어들게 된다.여기서 이상현상이 무엇인가?
=> 3가지의 이상현상이 있다.
- 삽입 이상(Insertion Anomaly) : 튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야 하는 현상
- 삭제 이상(Deletion Anomaly) : 튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
- 갱신 이상(Update Anomaly) : 튜플 갱신 시 중복된 데이터의 일부만 갱신되어 일어나는 데이터 불일치 현상
정규화의 방법?
=> 이상 현상을 제거하기 위해서 릴레이션을 의미 있는 속성들로만 구성하기 위해 릴레이션을 분해하는 과정
=> 함수 종속성을 제거한다.
함수 종속성이란?
=> X -> Y 일 때
"X가 Y를 함수적으로 결정한다" = "Y가 X에 함수적으로 종속되어 있다"
릴레이션 내의 모든 튜플을 대상으로 하나의 X값에 대한 Y값이 항상 하나인 경우를 의미합니다.
함수 종속 관계를 판단할 때 현재의 속성 값을 기준으로 판단하면 안 되고 속성에 들어올 수 있는 값들을 고려하여 판단, 일반적으로 기본키와 후보 키는 릴레이션의 다른 모든 속성들을 함수적으로 결정합니다.
완전 함수 종속 (Full Functional Dependency)
일반적으로 함수 종속은 완전 함수 종속을 의미하는데 X -> Y 일 때 속성 집합 X의 일부분에는 Y가 종속되어 있지 않습니다.
부분 함수 종속 (Partial Functional Dependency)
X -> Y 일 때 속성 집합 X의 부분집합에도 Y가 함수적으로 종속되어 있을 때 부분 함수 종속이라고 합니다.
이행적 함수 종속 (Transitive Functional Dependency)
함수 종속 관계 X -> Y, Y -> Z 가 있으면 논리적으로 X -> Z 가 성립된다. 이것을 Z가 X에 이행적으로 함수 종속되었다고 합니다.
정규화의 단계
모든 정규화는 전단계의 정규화를 진행한 다음에 진행됩니다.
1. 1차 정규화
1차 정규형은 각 로우마다 컬럼의 값이 1개씩만 있어야 합니다. 이를 컬럼이 원자값(Atomic Value)를 갖는다고 합니다.
2. 2차 정규화
2차 정규형은 테이블의 모든 컬럼이 완전 함수적 종속을 만족하는 것입니다. => 기본키중에 특정 컬럼에만 종속된 컬럼(부분적 종속)이 없어야 한다는 것입니다.
3. 3차 정규화
3차 정규형은 이행적 함수 종속을 없애도록 테이블을 분해하는 것입니다. => 기본 키에 의존하지 않고, 일반 컬럼에 의존하는 컬럼이 없어야 합니다.
4. BCNF(Boyce-Codd Normal Form)
BCNF는 모든 결정자가 후보키가 되어 테이블을 분해하는 것입니다. => 함수 종속이 아닌, 다중값 종속성을 제거하는 것입니다.
5. 4차 정규화
4차 정규형은 다차 종속성을 제거하기 위해 테이블을 분해하는 것입니다. => 다치 종송석이 있는 경우, 이를 분리하고 별도의 테이블로 관리하는 것입니다.
* 다차 종속성? : 특정 어트리뷰트가 다른 어트리뷰트에 대해 다중 값을 가질 때 발생한다.
ex) 사람 (이름, 전화번호)가 있을 때, 한 사람이 여러 개의 전화번호를 가진다면, 다차 종속성이 발생하게 된다.
6. 5차 정규화
5차 정규형은 다른 정규화 수준을 모두 만족하며, 릴레이션을 더 작은 릴레이션으로 분리해 복잡한 다차 종속성을 관리 하는 것입니다.
'CS > DataBase' 카테고리의 다른 글
[DataBase] 트랜잭션에 대하여 (0) 2023.10.23