Normalization
데이터베이스의 정규화는 데이터의 중복을 줄이고, 데이터의 무결성을 유지하기 위해 테이블 구조를 체계적으로 정리하는 과정이다.
정규화는 1형부터 5형까지 그 단계가 나뉘어있다.
제1정규형(1NF) - 원자값
테이블의 각 속성(컬럼)이 더 이상 쪼갤 수 없는 원자값이어야 함
제1정규화 예시
Before
고객명 | 전화번호 |
---|---|
철수 | 010-1234-5678,010-1111-2222 |
전화번호에 2개의 값이 들어있어 제1정규형을 만족하지 않음
After
고객명 | 전화번호 |
---|---|
철수 | 010-1234-5678 |
철수 | 010-1111-2222 |
제2정규형(2NF) - 부분 함수 종속 제거
복합키일 때, 기본키의 일부분만으로 결정되는 속성 제거
제2정규화 이행 조건
- 1NF를 이미 만족
- 기본키가 복합키일 경우만 가능
- 기본키 일부는 비기본키 속성이 될 수 없음
제2정규화 예시
Before
학번 | 과목명 | 교수명 |
---|---|---|
S001 | DB | 김교수 |
S002 | Network | 박교수 |
기본키가 학번과 과목명인 복합키일 때, 교수명은 과목명만으로 결정되는 부분 함수 종속이 발생함(과목명 -> 교수명)
After
과목
학번 | 과목명 |
---|---|
S001 | DB |
S002 | Network |
교수
과목명 | 교수명 |
---|---|
DB | 김교수 |
Network | 박교수 |
교수를 분리하여 부분 함수 종속 제거하여 완전 함수 종속을 만족함
제3정규형(3NF) - 이행 함수 종속성 제거
기본키가 아닌 속성이 다른 기본키가 아닌 속성에 의해 결정되면 안 됨
제3정규화 예시
Before
직원ID | 부서ID | 부서위치 |
---|---|---|
E01 | D01 | 제주 |
직원ID -> 부서ID -> 부서위치 관계의 이행 함수 종속이 발생함
After
직원
직원ID | 부서ID |
---|---|
E01 | D01 |
부서
부서ID | 부서위치 |
---|---|
D01 | 제주 |
직원과 부서 테이블을 분리하여 이행 함수 종속 제거
보이스-코드 정규형(BCNF) - 모든 결정자가 후보키
3NF를 더 엄격하게 적용한 것으로, 모든 결정자가 후보키여야 함
BCNF 예시
Before
교수명 | 과목명 | 강의실 |
---|---|---|
김교수 | DB | A101 |
김교수 | OS | A101 |
현재 테이블의 기본 키는 (교수명, 과목명)인데 교수명으로도 강의실을 결정할 수 있음.
따라서 결정자가 후보키가 아님
After
교수
교수명 | 강의실 |
---|---|
김교수 | A101 |
과목
과목명 | 강의실 |
---|---|
DB | A101 |
OS | A101 |
교수와 과목 테이블을 분리하여 함수 종속을 교수명 -> 강의실, 과목명 -> 강의실로 분리
제4정규형(4NF) - 다치 종속 제거
하나의 속성이 두 개 이상의 독립적인 다치 종속 관계를 가질 경우 이를 분리
제4정규화 예시
Before
학생ID | 자격증 | 외국어 |
---|---|---|
S001 | 정보처리기사 | 영어 |
S001 | 정보처리기사 | 일본어 |
S001 | 네트워크 | 영어 |
S001 | 네트워크 | 일본어 |
학생ID -> 자격증
-> 외국어
학생ID로 외국어와 자격정을 독립적으로 결정할 수 있지만, 테이블에서 다치 종속이 존재함
After
자격증
학생ID | 자격증 |
S001 | 정보처리기사 |
S001 | 네트워크 |
외국어
학생ID | 외국어 |
S001 | 영어 |
S001 | 일본어 |
제5정규형(5NF) - 조인 종속 제거
모든 조인 종속이 후보키를 통해서만 성립해야 함
조인을 반복할 때 불필요한 중복 데이터 생성을 막기 위한 정규형이다.
제5정규화 예시
Before
프로젝트 | 부서 | 기술 |
P1 | 개발팀 | 자바 |
P1 | 개발팀 | 파이썬 |
P1 | 기획팀 | 자바 |
P1 | 기획팀 | 파이썬 |
부서와 기술은 아무런 관련이 없어 불필요한 조인 결과가 발생
After
부서
프로젝트 | 부서 |
P1 | 개발팀 |
P1 | 기획팀 |
기술
프로젝트 | 기술 |
P1 | 자바 |
P1 | 파이썬 |
다음과 같이 테이블을 분리
요약
정규형 | 의미 | 제거 대상 |
---|---|---|
1NF | 원자값만 허용 | 반복 속성 |
2NF | 부분 함수 종속 제거 | 기본키 일부 → 비기본키 |
3NF | 이행 함수 종속 제거 | 비기본키 → 또 다른 비기본키 |
BCNF | 모든 결정자가 후보키일 것 | 후보키 아닌 결정자 |
4NF | 다치 종속 제거 | 하나의 키로 두 독립적 속성 |
5NF | 조인 종속 제거 | 불필요한 조인 중복 |
'Untagged' 카테고리의 다른 글
라즈베리파이의 GPIO (0) | 2025.03.01 |
---|---|
정보처리기사 필기 합격 후기 (+불합격 사례) (1) | 2025.02.08 |
Rancher Desktop으로 도커 컨테이너 구동하기 (0) | 2025.01.29 |
LAN에서 IP가 충돌할 때 발생하는 일 1 (0) | 2025.01.19 |
VSCode remote SSH 무한 로딩 문제 해결 (0) | 2024.12.15 |