본문 바로가기

자격증/SQLD

[SQLD][아이리포]06. 정규화 | 정규화 절차 | 정규형 | BCNF

반응형
목차

2. 정규화
2-1.. 정규화란?

2-1-1. 정규화를 하는 이유
2-1-2. 정규화의 결과
2-1-3. 정규화와 성능의 관계
2-2. 정규화 절차
2-2-1. 제1정규화
2-2-2. 제2졍규화
2-2-3. 제3정규화

 

2. 정규화

2-1. 정규화란?

데이터베이스의 이상현상(Anomaly)을 막기 위해 데이터의 중복을 최소화하면서 테이블을 보다 잘 조직화된 상태로 분해하는 과정이다.

 

쉽게 말해서, 하나의 테이블에 너무 많은 정보를 억지로 넣어두지 않고 중복되는 데이터와 종속 관계를 정리해서 테이블을 깔끔하게 분리하는 작업이라고 볼 수 있다.

1️⃣ 정규화를 하는 이유

정규화의 가장 큰 목적은 이상 현상 방지이다.

 

이상 현상이란 데이터를 입력, 수정, 삭제할 때 발생할 수 있는 문제를 말한다.

대표적인 이상 현상은 다음과 같다.

 

구분 설명
삽입 이상 데이터를 추가하려고 할 때 불필요한 데이터까지 함께 입력해야 하는 문제
수정 이상 중복된 데이터 중 일부만 수정되어 데이터가 불일치하는 문제
삭제 이상 데이터를 삭제했을 뿐인데 필요한 정보까지 함께 사라지는 문제

 

즉, 정규화는 이런 문제를 줄이기 위해 테이블을 적절하게 분리하는 과정이다.

2️⃣ 정규화의 결과

 정규화를 하면 다음과 같은 결과가 나타날 수 있다.

 

🔹 입력 / 수정 / 삭제 성능 향상

정규화를 통해 중복 데이터가 줄어들면, 데이터를 입력 / 수정 / 삭제할 때 처리해야 할 데이터가 줄어든다.

따라서 데이터의 입력 / 수정 / 삭제  성능이 향상될 수 있다.

 

🔹 조회 성능 하락 가능성

정규화를 하면 하나의 테이블이 여러 테이블로 분리된다.

이 때 분리된 데이터를 다시 함께 조회하려면 여러 테이블을 연결하는 조인(Join)이 필요하다.

 

조인이 많아지면 조회 과정이 복잡해질 수 있으므로 조회 성능이 하락할 가능성이 있다.

 

다만, 정규화를 한다고 해서 무조건 조회 성능이 하락하는 것은 아니다.

테이블 구조, 데이터 양, 인덱스, SQL 작성 방식에 따라 달라질 수 있다.

3️⃣ 정규화와 성능의 관계

정규화는 성능을 무조건 좋게 만들거나, 무조간 나쁘게 만드는 작업이 아니다.

상황에 따라 성능에 미치는 영향이 달라진다.

 

🔹 정규화로 조회 성능이 하락하는 경우

정규화를 하면 테이블이 여러 개로 분해된다.

이렇게 분해된 테이블의 데이터를 한 번에 조회하려면 여러 테이블을 조인해야 한다.

이 때 조인이 많아지거나 조회해야 할 데이터가 많아지면 조회 성능이 하락할 수 있다.

 

🔹 정규화를 통해 시스템 성능이 향상되는 경우

정규화를 하면 중복 데이터가 줄어든다.

중복 데이터가 줄어들면 불필요한 입력 / 수정 / 삭제 작업도 줄어들기 때문에 전체적인 시스템 성능이 향상될 수 있다.

2-2. 정규화 절차

정규화는 단계별로 진행된다.

SQLD에서는 주로 제1정규형, 제2정규형, 제3정규형을 중심으로 이해하면 된다.

정규화 단계 핵심내용
제1정규화 릴레이션의 속성값이 모두 원자값만으로 구성되어야 한다.
- 중복값을 제거한다.
- 기본키를 설정한다.
➜ 유사한 속성이 반복되는 경우를 제거해야 한다.
➜ 하나의 속성에는 하나의 값만 들어가도록 한다.
제2정규화 기본키가 2개 이상의 속성으로 이루어진 경우 부분 함수종속성을 제거한다,
  기본키가 여러 개일 때, 기본키의 일부에만 종속되는 속성을 분리한다.
제3정규화 기본키를 제외한 칼럼 간의 종속성을 제거한다.
이행 함수종속성을 제거한다.
➜ 기본키가 아닌 일반 속성 간의 종속성을 제거한다.
BCNF 기본키를 제외하고 후보키가 있는 경우 후보키가 기본키를 종속시키면 분해한다.
➜ 결정자가 후보키가 아닌 경우 분리한다.

 

1️⃣ 제1정규화(비정규형  -> 1차 정규형)

하나의 속성이 여러 속성값을 갖거나 하나의 테이블에 유사한 속성이 반복될 때 이를 별도 테이블로 분리하는 과정이다.

 

핵심은 하나의 속성은 반드시 하나의 속성값만 가져야 한다는 것이다.

 

 

📌 제1정규화 핵심
- 하나의 속성에는 하나의 값만 들어가야 한다.

- 반복되는 속성이나 중복되는 값을 제거한다.

- 유사한 속성이 반복되는 경우 별도 테이블로 분리한다

- PK와 일반속성이 1:1이 되게 분리하며, 이렇게 분리된 두 테이블은 1:M의 관계를 가진다.

 

✔️ 정규화와 정규형

정규화를 통해 정규형을 만든다.

2️⃣ 제2정규화(1차정규형 -> 2차정규형)

(복합식별자의 경우)일반 속성이 주식별자의 일부에만 종속성을 갖는 부분 함수종속성을 제거하는 것이다.

즉, 복합식별자 중 일부에만 의존하는 일반 속성을 찾아 별도의 테이블로 분리하는 과정이다.

 

✔️복합식별자(혹은 복합키)

기본키가 2개 이상의 속성으로 이루어진 경우를 말한다.


📌 제2정규화 핵심

- 기본키가 하나일 때는 보통 제2정규화 문제가 발생하지 않는다.

- 일반 속성이 기본키 전체가 아니라 일부에만 종속되면 분리한다.

- 반복되는 속성이나 중복되는 값을 제거한다.

3️⃣ 제3정규화(2차 정규형 -> 3차 정규형)

주식별자가 아닌 일반 속성 간에 함수종속성이 존재하는 이행 함수종속성을 제거하는 과정이다.

 

✔️ 이행함수종속성

A가 B를 결정하고, B가 C를 결정하면 A가 C를 결정한다.

 

📌 제3정규화 핵심
- 일반 속성 간의 종속성을 제거한다.

- 기본키가 아닌 속성이 다른 일반 속성을 결정하면 분리한다.

- 이행 함수 종속성을 제거하는 단계이다.

 

📝 요약정리

기본키(PK)
일반속성1
일반속성2
일반속성3
일반속성4
일반속성5

 

- BCNF : 일반속성이 기본키를 정의하는 경우

- 제3정규화 : 일반속성1이 일반속성2를 결정하는 경우 (일반 속성간에 함수종속성이 일어나는 경우)

- 제2정규화 : 기본키가 여러 개일 때, 기본키 A가 일부 일반속성들을 결정하는 경우


🔗 출처

[SQLD 모든 것]

 

반응형