데이터베이스 정규화

이재민·2023년 11월 27일

데이터베이스 정규화

데이터베이스 정규화란, 데이터 중복 삽입, 수정, 삭제 anomaly(이상 현상)을 최소화하기 위해 일련의 Normal forms(NF)에 따라 관계형 DB를 구성하는 과정입니다.

함수 종속(Functional Dependeny)

함수 종속성이란, 집합 x 값에 따라 y값이 유일하게 결정될 때, 'x가 y를 함수적으로 결정한다.' 또는 'y가 x에 함수적으로 의존하다.' 라고 말 할 수 있습니다.
X -> Y 라고 표현하고, 집합 X가 집합 Y를 결정합니다.

부분적 함수 종속(Partial Functional Dependency)

부분적 함수 종속이란, X -> Y를 결정하고 X의 proper subset 중 하나라도 Y를 결정할 수 있다면 부분적 함수 종속성이라고 합니다.
키본키가 아닌 다른 속성값에 종속되거나, 복합키의 경우 복합키의 일부에만 종속되는 경우에 해당합니다.

proper subset은 자기 자신을 제외한 부분 집합을 말합니다.
예를 들어 X = {a, b, c} 일 때, {a, b, c} 를 제외한 {a, c}, {a}, {} 모두 X의 proper subset이다.

완전 함수적 종속(Full Functional Dependency)

완전 함수적 종속이란, X -> Y를 결정할때 집합 X의 proper subset 중 하나라도 집합 Y를 만족하지 못하는 경우를 완전 함수적 종속이라고 합니다.

예를 들어 {stu_id, class_id} -> {grade} 를 결정할 때, X의 부분 집합은 {stu_id}, {class_id}, {}이 존재하는데, 이 모든 부분 집합은 {grade}를 결정할 수 있는 조건은 아닙니다.
이렇게 부분집합으로 종속 관계가 유효하지 않을 경우 완전 함수적 종속이라고 말합니다.

예를 들어 고객ID, 제품 코드가 기본키일 경우, 주문 상품은 키본키 중 '제품코드'만으로 식별이 가능할 경우 '주문상품' 속성은 기본키에 부분적 함수 종속된 관계입니다.

이행적 함수 종속(Transitive Functional Dependency)

이행적 함수 종속성이란, 직접적으로 종속되지는 않지만, 종속성이 이어진 경우를 말합니다.
예를 들어 A->B, A->C 의 종속성을 갖고 있을 때, A->C의 종속성을 갖게 되는데 이를 이행적 함수 종속성이라고 합니다.

1NF(제 1정규화)

1NF는 다음과 같은 규칙을 만족해야 합니다.
attribte의 value는 반드시 나눠질 수 없는 단일한 값이어야 합니다.

1NF를 만족시키기 위해 동일 레코드를 생성하게 된다면, 중복 데이터가 발생하고 primary key도 변경을 해야 합니다.

2NF(제 2정규화)

2NF는 다음과 같은 규칙을 만족해야 합니다.
1. 1NF를 만족해야 합니다.
2. Partial Functional Dependency(부분적 함수 종속)가 존재하지 않아야 합니다.

3NF(제 3정규화)

3NF는 다음과 같은 규칙을 만족해야 합니다.
1. 2NF를 만족해야 합니다.
2. Transitive Functional Dependency(이행적 함수 종속)가 존재하지 않아야 합니다.

3NF까지 진행되면 "정규화 됐다"라고 말 할 수 있습니다.

BCNF

BCNF는 다음과 같은 규칙을 만족해야 합니다.
1. 3NF를 만족해야 합니다.
2. 모든 Functional Dependency의 결정자의 부분집합은 SuperKey여야 합니다.

비정규화

비정규화란, 정규화된 관계를 정규화 전 상태로 되돌리는 것입니다. 과한 정규화를 통해 성능상 문제가 발생할 수 있기 때문입니다.(적절한 TradeOff 필요)

profile
문제 해결과 개선 과제를 수행하며 성장을 추구하는 것을 좋아합니다.

0개의 댓글