[DB] 데이터베이스 정규화(Normalization)
목차
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 |
공부하며 작성한 글입니다 피드백은 언제나 환영입니다 !