정규화(Normalization)란?
. 정규화란 관계형 데이터베이스에서 중복을 최소화하여 데이터를 구조화하는 과정입니다.
. 이 글에선 3NF까지만 다룹니다.
정규화를 하는 이유
. 데이터 변경 시 이상 현상(CUD 중 발생하는 오류)를 제거하기 위해서.
. DB 확장 시 DB의 구조 변경을 최소화하기 위해서.
제1 정규형 (1NF)
조건 1. 필드와 레코드의 순서는 상관 없어야 합니다
조건 2. 필드명은 중복되선 안 됩니다
조건 3. 하나의 레코드에는 하나의 값만 들어갑니다
회원번호 | 도서명 |
1 | 오리진 1권, 2권 |
. 위 테이블에서 '도서명' 필드의 레코드에 2개의 값이 있기 때문에 다음과 같이 고쳐야 합니다.
회원번호 | 도서명 |
1 | 오리진 1권 |
1 | 오리진 2권 |
제2 정규형 (2NF)
조건 1. 제1 정규형을 만족해야 합니다.
조건 2. 모든 필드에 부분적 종속이 없어야 합니다. 즉 완전 함수 종속을 만족해야 합니다.
. 부분적 종속이란 PK가 여러 필드의 조합일 때, 일반 필드가 PK의 조합 중 일부만 있어도 되는 상황을 말합니다.
- 테이블 예시로 보면 다음 테이블과 같습니다.
회원번호 (PK) | ISBN (PK) | 도서명 |
1 | 111-1-11-111111-1 | 오리진 1권 |
1 | 222-2-22-222222-2 | 오리진 2권 |
▴ 위 테이블에서 PK의 조합은 '회원번호'와 '도서명' 필드의 조합인데 '도서명' 필드는 'ISBN' 필드만으로도 알 수 있는 정보입니다. 따라서 위 테이블을 다음과 같이 쪼개야 합니다.
ISBN (PK) | 도서명 |
111-1-11-111111-1 | 오리진 1권 |
222-2-22-222222-2 | 오리진 2권 |
회원번호 (PK) | ISBN (FK) |
1 | 111-1-11-111111-1 |
1 | 222-2-22-222222-2 |
제3 정규형 (3NF)
조건 1. 제2 정규형을 만족해야 합니다.
조건 2. 키가 아닌 필드 간 이행 종속성이 없어야 합니다.
. 이행 종속성이란 PK가 아닌 필드들은 PK에만 의존해야 하며, 다른 키에 의존해선 안 됩니다.
- 쉽게 풀면 A가 PK일 때 A→B이고 B→C라서 A→C 관계가 성립하는 상태입니다.
- 테이블 예시로 보면 다음 테이블과 같습니다.
회원번호 (PK) | 등급 | 대출 가능 수량 |
1 | 가 | 2 |
▴ '회원번호' 필드를 알면 '등급'을 알 수 있습니다. '등급'을 알면 '대출 가능 수량'을 알 수 있습니다. 하지만 '회원번호'만 알아도 '대출 가능 수량'을 알 수 있습니다. 제3 정규형을 만족하기 위해서 다음과 같이 테이블을 쪼개야 합니다.
회원번호 (PK) | 등급 (FK) |
1 | 가 |
등급 (PK) | 대출 가능 수량 |
가 | 2 |
제3.5 정규형 (BCNF)
조건 1. 제3 정규형을 만족해야 합니다.
조건 2. PK가 아닌 필드가 다른 필드의 값을 결정해선 안 됩니다.
. 테이블 예시로 보면 다음 테이블과 같습니다.
회원번호 (PK) | 등급 | 대출 가능 수량 |
1 | 가 | 2 |
- 대출 가능 수량은 등급에 의해 결정되지만 등급은 PK가 아니므로 위 테이블은 다음과 같이 쪼개야 합니다.
회원번호 (PK) | 등급 (FK) |
1 | 가 |
등급 (PK) | 대출 가능 수량 |
가 | 2 |
#00741 #한설날