정규화
개념
- 데이터의 중복을 줄이고 무결성을 지키기 위해 사용하는 데이터베이스 구성 방법.
- 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 의미.
- 무결성의 종류는 4가지가 있는데, 여기서는 자세히 다루지 않음.
장점
- 데이터를 작고 관리하기 쉽게 나누어 데이터 중복을 제거.
단점
- 여러 테이블과 참조 관계를 설정하기 때문에 join 연산이 발생하고, 조회 연산 속도가 느려질 수 있음.
비정규화
개념
- 정규화로 인해 join 연산이 많아질 경우 성능 개선을 위해 사용하는 데이터베이스 구성 방법.
- 정규화는 데이터 중복을 제거, 비정규화는 데이터 중복을 허용하는 것.
장점
- join 연산 감소로 조회 연산 속도 증가.
단점
- 중복된 데이터 증가.
정규형
출처: [DB] 정규형 (1NF, 2NF, 3NF, BCNF) [티스토리]
제1 정규형
- 릴레이션의 모든 도메인이 원자 값으로 구성.
- 원자 값: 단 하나의 값만 가지는 것을 의미
| ID | 이름 | 전화번호 | | — | — | — | | 1 | 김철수 | 123-1234, 123-1235 | | 2 | 고영희 | 123-1236 |
- 전화번호를
{123-1234, 123-1234}
와 같이 여러 값을 가질 수 없다. - 아래와 같이 분리 가능
[회원]
ID | 이름 |
---|---|
1 | 김철수 |
2 | 고영희 |
[전화번호]
ID | 회원ID (FK) | 전화번호 |
---|---|---|
1 | 1 | 123-1234 |
2 | 1 | 123-1235 |
3 | 2 | 123-1236 |
- 아래와 같이 반복 그룹을 가지는 속성이 있어도 제1 정규형 위반.
| ID | 이름 | 전화번호1 | 전화번호2 | | — | — | — | — | | 1 | 고영희 | 123-1234 | 123-1235 |
- 아래와 같이 분리할 수 있음.
[회원]
ID | 이름 |
---|---|
1 | 고영희 |
[전화번호]
ID | 회원ID (FK) | 전화번호 |
---|---|---|
1 | 1 | 123-1234 |
2 | 1 | 123-1235 |
제2 정규형
- 부분적 함수 종속성 제거.
- 모든 속성은 반드시 모든 기본키에 종속되어야 함.
기본키가 아닌 모든 속성이 기본키에 완전 함수 종속된 상태
| 회원 ID(PK, FK) | 상품 ID (PK, FK) | 주문일자 | 상품명 | 주문수량 | | — | — | — | — | — | | 1 | 3 | 2024-08-04 | 제품3 | 1 | | 2 | 1 | 2024-08-05 | 제품1 | 2 |
- 회원 ID, 상품 ID 두 개의 키(복합키)로 기본키를 사용.
- 주문일자, 주문수량은 기본키에 종속적임.
- 회원 ID 가 바뀌면 주문일자, 주문수량이 바뀜.
- 상품 ID 가 바뀌면 주문일자, 주문수량이 바뀜.
- 하지만 상품명은 기본키에 종속적이지 않음.
- 상품명이 바뀌는 건 상품 ID 가 바뀌기 때문이지, 회원 ID 가 상품명을 바꾸는 것이 아님.
- 즉, 상품 ID 만 알아도 상품명을 알 수 있기 때문에 부분적 함수 종속성이 존재.
- 부분적 함수 종속성을 제거하기 위해 아래와 같이 테이블을 나눌 수 있다.
[주문내역]
회원 ID(PK, FK) | 상품 ID (PK, FK) | 주문일자 | 주문수량 |
---|---|---|---|
1 | 3 | 2024-08-04 | 1 |
2 | 1 | 2024-08-05 | 2 |
[상품]
상품 ID (PK) | 상품명 |
---|---|
1 | 제품1 |
2 | 제품2 |
3 | 제품3 |
제3 정규형
- 이행적 함수 종속 제거.
- 기본키를 제외하고 나머지 속성들이 서로 종속될 수 없음.
| 상품 ID (PK) | 상품명 | 구매처 | 구매처별 최소구매수량 | | — | — | — | — | | 1 | 제품1 | A | 20 | | 2 | 제품2 | B | 30 | | 3 | 제품3 | C | 40 | | 4 | 제품4 | A | 20 |
- 상품명을 알면 구매처를 알 수 있고, 구매처를 알면 구매처별 최소구매수량을 알 수 있다.
- 즉, 구매처별 최소구매수량은 구매처에 종속된다.
- 아래와 같이 테이블을 분리할 수 있다.
[상품]
상품 ID (PK) | 상품명 | 구매처 |
---|---|---|
1 | 제품1 | A |
2 | 제품2 | B |
3 | 제품3 | C |
4 | 제품4 | A |
[구매처]
구매처 (PK) | 최소구매수량 |
---|---|
A | 20 |
B | 30 |
C | 40 |
BCNF
- 제3 정규형 만족 + 모든 결정자가 후보키 집합에 속해야 함.
- 후보키는 각 행을 유일하게 식별할 수 있는 최소한의 속성들의 집합.
| 학생번호(PK) | 과목(PK) | 교수 | | — | — | — | | 1 | 경영학원론 | A | | 2 | 마케팅원론 | B | | 3 | 회계원리 | C | | 4 | 경영학원론 | A |
- (학생번호, 과목)를 기본키로 교수를 알 수 있다. (결정자: 학생번호, 과목)
- 마찬가지로 교수를 알면 과목을 알 수 있다. (결정자: 교수)
- 하지만 교수에 의해 특정 행이 유일하게 식별되지 않는다.
- A 교수을 통해 1번 학생과 4번 학생을 찾을 수 있는데, 이는 유일한 식별 대상이 아니라는 뜻이다.
- 즉, 교수는 결정자로서 후보키가 될 수 없기 때문에 분리해야 한다.
학생번호(PK) | 교수 |
---|---|
1 | A |
2 | B |
3 | C |
4 | A |
교수(PK) | 과목 |
---|---|
A | 경영학원론 |
B | 마케팅원론 |
C | 회계원리 |
제4 정규형
- 다중값 종속(다치 종속)이 없어야 한다.
- 하나의 속성이 다른 두 개 이상의 속성에 독립적으로 종속되는 관계를 의미한다.
| 학생번호 | 과목 | 취미 | | — | — | — | | 1 | 경영학원론 | 수영 | | 1 | 회계원리 | 테니스 | | 2 | 경영학원론 | 수영 | | 2 | 마케팅원론 | 테니스 |
- 위의 테이블에서는 학생 번호 하나에 여러 과목과 여러 취미가 종속된다.
- 과목과 취미는 관계가 없는 독립적인 관계이지만, 학생 번호에 다치 종속이 되어 중복이 발생한다.
- 이러한 문제를 해결하기 위해 아래와 같이 테이블을 분리할 수 있다.
학생번호 | 과목 |
---|---|
1 | 경영학원론 |
1 | 회계원리 |
2 | 경영학원론 |
2 | 마케팅원론 |
학생번호 | 취미 |
---|---|
1 | 수영 |
1 | 테니스 |
2 | 수영 |
2 | 테니스 |
제5 정규형
- 중복을 제거하기 위해 분해할 수 있는 만큼 전부 분해하는 것이다.
- 조인 종속이 없어야 하고, 조인 연산을 했을 때 손실이 없어야 한다.
- 조인 종속은 다치 종속의 좀 더 일반화된 형태이다.
- 조인 종속은 하나의 릴레이션을 여러 릴레이션으로 분해했다가 다시 결합할 수 있는 것을 의미한다.
출처: [DB] 제 4정규형과 제 5정규형, 4NF와 5NF [티스토리]
참고자료
- 데이터베이스 정규화와 비정규화 [velog]
- [DB] 정규형 (1NF, 2NF, 3NF, BCNF) [티스토리]
- 정규화 (1NF, 2NF, 3NF, BCNF, 4NF, 5NF) [velog]
- [SQL] 키(슈퍼키,대체키,후보키,기본키,외래키) [티스토리]
- [DB] 제 4정규형과 제 5정규형, 4NF와 5NF [티스토리]