DB

[DB] 데이터베이스 정규화(Normalization)

yeneua 2024. 5. 22. 12:28
목차
0. 정규화(Normalization)
1. 제 1 정규형
2. 제 2정규형
3. 제 3 정규형
4. 보이스코드 정규형
5. 제 4 정규형
6. 제 5 정규형

 

 

0. 정규화

관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고, 데이터의 일관성정확성을 유지하기 위해 무손실 분해하는 과정

 

이상현상(Abnomaly) : 삽입 이상, 삭제 이상, 갱신 이상

 

 

 

1. 제1 정규형(1NF)

💡 원자값으로 구성

 

테이블 내에 속성값은 원자값을 가지고 있어야 한다

 

예시

ID 이메일
1 1234@gmail.com, 5678@gmail.com

 

한 컬럼에 속성값이 하나씩 들어가도록 분해 과정이 필요하다

ID 이메일
1 1234@gmail.com
2 5678@gmail.com

 

 

 

2. 제2 정규형(2NF)

💡부분 함수 종속 제거(완전 함수적 종속 관계)

 

모든 컬럼이 부분 함수 종속 제거한 완전 함수적 종속 관계여야 한다.

즉, 기본키(PK)가 복합 키일경우 기본 키를 구성하는 속성 일부에 의해 종속된 컬럼이 없어야 한다.

 

예시

고객명 서비스 이름 서비스 가격 서비스 이용 기간
홍길동 헬스 70000 1달
홍길동 수영 100000 2달
장길산 수영 100000 2달

 

기본키는 고객명, 서비스 이름이다.

 

기본키 고객명, 서비스 이름에 의해 서비스 이용 기간이 결정되고 있다.

이때 기본 키의 일부 속성인 서비스 이름에 대해서 서비스 가격 컬럼이 결정되고 있는 것을 알 수 있다.

 

이런 경우, 부분 함수 종속성으로 제2 정규형을 위반하며 분해 과정이 필요하다.

고객명 서비스 이름 서비스 이용 기간
홍길동 헬스 1달
홍길동 수영 2달
장길산 수영 2달

 

서비스 이름 서비스 가격
헬스 70000
수영 100000

 

 

 

제3 정규형(3NF)

💡이행함수 종속 제거

 

속성에 종속적인 속성을 분리한다.

모든 속성에 기본키에 의존하며, 기본키 외의 다른 속성은 종속 관계를 가질 수 없다.

 

이행 종속 관계 : A->B이고, B->C일 때, A->C를 만족

 

예시

학번 이름 학과 학과 사무실
240510 김민지 경영학과 326호
242236 이수연 컴퓨터공학과 415호
246301 박정민 통계학과 406호

 

 

학번 -> 학과, 학과 -> 학과 사무실 : 학번 -> 학과 사무실을 만족한다.

위 릴레이션은 이행 함수 종속성으로 인해 3차 정규화를 만족하지 못하기 때문에 다음과 같이 분리해야 한다.

 

학번 이름 학과
240510 김민지 경영학과
242236 이수연 컴퓨터공학과
246301 박정민 통계학과

 

학과 학과 사무실
경영학과 326호
컴퓨터공학과 415호
통계학과 406호

 

 

 

4. 보이스-코드 정규화(BCNF)

💡결정자 후보 키가 아닌 함수 종속 제거

 

식별자로 쓰이는 속성이 일반 속성에 종속되지 않아야 한다.

복합키의 일부가 다른 속성에 의해 종속되는 것을 제거해야 한다.

즉, 모든 결정자가 후보키여야 한다.

 

예시

학번 과목 지도교수
101 자바 김자바
101 C++ 박플플
102 자바 오자바
103 C# 조씨샵
104 자바 김자바

 

기본키는 학번, 과목으로, 기본키에 의해 지도교수가 결정되고 있다.

그러나 지도교수에 의해 과목이 결정되고 있지만 지도교수는 후보 키가 아니다.

지도교수가 결정자이지만 후보키가 아니기 때문에 보이스-코드 정규화에 위배된다.

 

학번 지도교수
101 김자바
101 박플플
102 오자바
103 조씨샵
104 김자바
지도교수 과목
김자바 자바
박플플 C++
오자바 자바
조씨샵 C#

 

지도교수가 후보 키 역할을 하도록 하여 보이스-코드 정규화를 만족시킨다

 

 

 

5. 제4 정규형(4NF)

💡다치(다중 값) 속성 제거

 

예시

개발자 자격증 언어
홍길동 정보처리기사 C
홍길동 빅데이터분석기사 C++
장길산 정보보안기사 JAVA

 

개발자 -> 자격증

개발자 -> 언어

개발자별로 여러 자격증을 가지고 있고, 개발자 별로 여러 언어 값을 가지고 있다

두 가지 의존성을 가지고 있으므로 특정 속성 값에 따라 선택적인 속성을 분리한다

 

개발자 자격증
홍길동 정보처리기사
홍길동 빅데이터분석기사
장길산 정보보안기사
개발자 언어
홍길동 C
홍길동 C++
장길산 JAVA

 

 

 

6. 제5 정규형(5NF)

💡조인 종속 제거

 

예시

개발자 자격증 언어
홍길동 정보처리기사 C
홍길동 빅데이터분석기사 C
홍길동 정보처리기사 C++
홍길동 빅데이터분석기사 C++
장길산 정보보안기사 JAVA

 

위의 4NF의 테이블에 대해 조인 연산을 수행한 테이블이다.

4차 정규화 수행 전 데이터와 다르게 되는 조인 종속 문제가 발생한다.

 

개발자 자격증
홍길동 정보처리기사
홍길동 빅데이터분석기사
장길산 정보보안기사
자격증 언어
정보처리기사 C
빅데이터분석기사 C++
정보보안기사 JAVA
개발자 언어
홍길동 C
홍길동 C++
장길산 JAVA

 

 

 

공부하며 작성한 글입니다 피드백은 언제나 환영입니다 !