[데이터베이스] 정규화

조수훈·2023년 10월 4일
0

DataBase

목록 보기
10/11
post-thumbnail

이상 현상(Anomaly)

이상 현상이란 정규화를 수행하지 않았을때, 데이터의 중복성에 의해서 발생되는 무결성 저하 현상입니다.
이상 현상의 종류로는 갱신 이상, 삽입 이상, 삭제 이상 이 있습니다.
이러한 이상 현상은 정규화를 통해 방지 할 수 있습니다.

1. 갱신 이상(Modification Anomaly)

어떤 속성에 해당하는 값을 업데이트 했을때, 해당 값이 이미 해당 속성에 있는 값일때, 데이터의 중복현상이 일어나게 됩니다. 이러한 현상을 갱신 이상이라고 합니다.

2. 삽입 이상(Insertion Anomaly)

어떤 데이터를 저장해야할때, 한 속성의 값이 필요없어서 관련한 데이터를 넣지 않는다면 데이터베이스에 삽입할 수 없게 됩니다. 이러한 현상을 삽입 이상이라고 합니다.

3. 삭제 이상(Deletion Anomaly)

특정 정보를 삭제하면, 필요한 정보도 같이 삭제되는 현상을 삭제 이상이라고 합니다.

함수 종속성

데이터베이스에서 함수 종속성은 한 테이블의 열(속성)들 간의 관계를 나타내는 중요한 개념입니다. 함수 종속성은 특정 열(속성)이 다른 열(속성)에 어떻게 의존하는지를 설명하며, 데이터베이스 정규화와 데이터 무결성을 관리하는 데 중요한 역할을 합니다.

어떤 테이블의 속성 A와 B에 대하여, A값에 의해 B값이 유일하게 정해지는 관계일때, "B는 A에 함수 종속이다"라고 합니다. 이때, A를 결정자라고 하고, B를 종속자라고 합니다.

함수 종속은 크게 다음과 같은 세가지 경우로 나뉘게 됩니다.

완전 함수적 종속

기본키를 구성하는 모든 속성에 종속되는 경우

부분 함수적 종속

기본키를 구성하는 속성의 일부에 종속되거나, 기본키가 아닌 다른 속성에 종속되는 경우

이행적 함수적 종속

A,B,C 세 속성이 있으며, A->B, B->C 의 종속 관계가 있을때, A->C가 성립하는 경우

정규화(normalization)

관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상 (Anomaly)을 방지하고, 데이터의 일관성과 정확성, 즉 무결성(Integrity) 을 유지하기 위해 무손실 분해하는 과정을 말한다.

정규화에는 테이블을 분해하는 정규화 단계가 정의 되어 있습니다.
테이블을 어떻게 분해하게 되는지에 따라서 정규화 단계가 달라지게 됩니다.

제1정규화 도메인 원자값 (1NF)

테이블의 컬럼이 원자값(Atomic Value, 하나의 값)을 갖도록 테이블을 분해 합니다.
1NF는 다음을 만족해야 합니다.

각 컬럼이 하나의 속성만을 가져야 한다.
하나의 컬럼은 같은 종류나 타입(type)의 값을 가져야 한다.
각 컬럼이 유일한(unique) 이름을 가져야 한다.
칼럼의 순서가 상관없어야 한다.

제2정규화 부분적 함수 종속 제거 (2NF)

제1 정규화를 진행한 테이블에 대해 완전 함수 종속을 만족하도록 테이블을 분해하는 것입니다.

제 1정규형을 만족해야 한다.
모든 컬럼이 부분적 종속이 없어야 한다. 즉, 모든 컬럼이 완전 함수 종속을 만족해야 한다.

제3정규화 이행적 함수 종속 제거 (3NF)

제2 정규화를 진행한 테이블에 대해 이행적 종속을 없애도록 테이블을 분해하는 것입니다.

제 2정규형을 만족해야 한다.
기본키를 제외한 속성들간의 이행 종속성 (Transitive Dependency)이 없어야 한다.

보이스-코드 정규화 BCNF(Boyce-Codd Normal Form)

3차 정규화를 진행한 테이블에 대해 모든 결정자가 후보키 집합에 속하게 하기 위해 테이블을 분해하는 것입니다.

제 3정규형을 만족해야 한다.
모든 결정자가 후보키 집합에 속해야 한다.

정리

제1정규화 : 중복된 데이터를 제거하고, 각 열은 원자적인 값을 가지게합니다.
제2정규화 : 부분 함수 종속성을 제거하기 위해 1차 정규화된 테이블에서 일부 열을 새로운 테이블로 이동합니다.
제3정규화 : 이행 함수 종속성을 제거하기 위해 2차 정규화된 테이블에서 일부 열을 새로운 테이블로 이동합니다.
BCNF : 모든 결정자가 후보키가 되도록 하기위해 테이블을 분리합니다.

반정규화(de-normalization)

반정규화 de-normalization : 성능 최적화 및 편리한 쿼리 작성을 위해 정규화된 데이터베이스 스키마를 일부러 비정규화하는 프로세스를 의미합니다. 반정규화는 일부 테이블을 결합하거나 중복 데이터를 허용하는 등의 방법으로 데이터를 구조화하는 것을 의미합니다.

즉, 성능 향상을 위해 정규화된 데이터 모델에서 중복, 통합, 분리 등을 수행하는 모든 과정을 의미합니다. 반정규화를 적용하면 데이터 무결성이 깨질 수 있는 위험이 있습니다.

Reference:

정규화단계 : https://velog.io/@wisdom-one/%EC%A0%95%EA%B7%9C%ED%99%94Normalization

profile
잊지 않기 위해 기록하기

0개의 댓글