정규화(Normalization)란 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화 하는 프로세스로서 데이터 정규화의 목표는 이상(Anomaly)
이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것이다.
위의 정의를 보면 알 수 있듯이 잘못된 설계로 기인한 불필요한 데이터 중복 및 공간낭비등 각종 데이터베이스 이상(삽입
, 삭제
, 갱신
)으로부터 벗어나 최소화된 중복과 공간낭비로 효율적인 데이터베이스를 관리하기 위해서 필요하다.
⚠️ 정규화 시 주의사항
데이터베이스가 정규화된 정도에 따라 제 1~6 정규형(Normal Form; NF)
으로 구분하게 되는데 그 중 1~3 정규형까지 정리하며 알아볼 예정이다. 제 1~3 정규형 및 보이스/코드 정규형(BCNF)은 기본 정규형
이라고 하며 제 4, 5 정규형은 고급 정규형으로 구분한다. 모든 테이블이 제 5정규형에 속해야만 바람직한 것은 아니다. 일반적으로 제 3정규형이나 보이스/코드 정규형에 속하도록 테이블을 분해하며, 데이터 중복을 줄이고 이상현상을 해결하는 경우가 많다.
테이블의 모든 속성이 원자값이어야 한다.
여기서 원자값이란 더 이상 분리되지 않는 값으로 모든 속성은 원자 값 이라고 한다. 제 1 정규형을 만족해야 관계 데이터베이스의 릴레이션이 될 자격이 있다.
고객이름 | 이벤트 번호 | 등급 | 당첨여부 | 할인율 |
---|---|---|---|---|
김하마 | E01, E02 | gold | y, n | 10% |
이토끼 | E02, E03 | vip | y, y | 10% |
박사자 | E03 | gold | n | 20% |
고객이름 | 이벤트 번호 | 등급 | 당첨여부 | 할인율 |
---|---|---|---|---|
김하마 | E01 | gold | y | 10% |
김하마 | E02 | gold | n | 10% |
이토끼 | E02 | vip | y | 20% |
이토끼 | E03 | vip | y | 20% |
박사자 | E03 | gold | n | 10% |
테이블의 속성이 모두 원자 값으로 제 1 정규형에 만족하게 되었다. 하지만 데이터 중복으로 인한 이상(Anomaly)이 발생하는 것을 알 수 있다.
기본키가 아닌 모든 속성이 고유키에 완전 함수 종속된다.
고유 키
는 고객이름
과 이벤트 번호
두가지로 복합키
를 가지고 있다. 이럴경우 이 두가지 복합키에 완전히 종속되는지 여부를 확인하여 관계가 없다면 다른 테이블로 분리해준다.
고객이름 | 이벤트 번호 | 등급 | 당첨여부 | 할인율 |
---|---|---|---|---|
김하마 | E01 | gold | y | 10% |
김하마 | E02 | gold | n | 10% |
이토끼 | E02 | vip | y | 20% |
이토끼 | E03 | vip | y | 20% |
박사자 | E03 | gold | n | 10% |
[고객 테이블]
고객이름 | 등급 | 할인율 |
---|---|---|
김하마 | gold | 10% |
이토끼 | vip | 20% |
박사자 | gold | 10% |
[이벤트 테이블]
고객이름 | 이벤트 번호 | 당첨여부 |
---|---|---|
김하마 | E01 | y |
김하마 | E02 | n |
이토끼 | E02 | y |
이토끼 | E03 | y |
박사자 | E03 | n |
고객테이블과 이벤트 테이블로 분해하여 고유 키에 완전히 종속되도록 하였다.
3NF를 만족하려면 이행적 함수 종속을 제거해야 한다.
고객테이블을 보면 이름
과 등급
, 그리고 그 등급에 따른 할인율
로 컬럼이 구분되어있다. 하지만 만약 등급에 따른 할인율이 변경된다고 하면 모든 사람들의 할인율을 바꿔줘야 할 것이다. 이렇게 갑-을
의 관계만 존재하는 것이 아닌 갑-을-병-정
의 관계로 되어있는 것을 이행적 함수 종속
이 존재한다고 한다. 이럴 경우에는 이행적 함수 종속이 제거되도록 다시 고객 테이블을 분해해주면 된다.
[고객 테이블]
고객이름 | 등급 | 할인율 |
---|---|---|
김하마 | gold | 10% |
이토끼 | vip | 20% |
박사자 | gold | 10% |
[고객 테이블]
고객이름 | 등급 |
---|---|
김하마 | gold |
이토끼 | vip |
박사자 | gold |
[고객등급 테이블]
등급 | 할인율 |
---|---|
gold | 10% |
vip | 20% |
gold | 10% |
참조
🔗 YABOONG 블로그 | 데이터베이스 정규화 - 이상현상 & 함수적 종속성