데이터베이스 정규화?
이상현상이 있는 릴레이션을 분해하여 이상현상을 없애는 과정으로 단계별로 구분해 정규형이 높아질수록 이상현상을 줄인다.
이상현상?
데이터베이스에서 정규화를 수행하지 않으면, 데이터의 중복이 발생하고 전체적인 무결성의 저하로 이어진다. 이러한 원인은 이상현상으로 인해 실제 값과 데이터베이스에 저장된 값이 일치하지 않는 문제가 발생한다.
이상현상을 설명할 대학교 릴레이션이다.
학번 | 학생명 | 학과명 | 동아리 |
1 | 바트 | 컴퓨터공학과 | 피아노 |
2 | 호머 | 물리학과 | 마술 |
3 | 마지 | 신소재공학과 | 밴드 |
삽입 이상
튜플 삽입 시 특정 속성에 해당하는 값이 없어 NULL을 입력해야하는 현상
새로 개설된 탁구 동아리를 테이블에 추가 해야하지만 동아리원이 없어 특정 속성에 해당하는 값이 없어 NULL을 입력해야한다.
학번 | 학생명 | 학과명 | 동아리 |
1 | 바트 | 컴퓨터공학과 | 피아노 |
2 | 호머 | 물리학과 | 마술 |
3 | 마지 | 신소재공학과 | 밴드 |
탁구 |
삭제 이상
튜플 삭제 시 같이 저장된 다른 정보까지 연쇄적으로 삭제되는 현상
호머가 자퇴하면 학과, 동아리에 대한 정보도 삭제된다.
학번 | 학생명 | 학과명 | 동아리 |
1 | 바트 | 컴퓨터공학과 | 피아노 |
3 | 마지 | 신소재공학과 | 밴드 |
수정 이상
튜플 수정 시 중복된 데이터의 일부만 수정되어 일어나는 데이터 불일치 현상
피아노 동아리원이 천명이라고 가정하고 피아노 동아리가 밴드 동아리로 바뀌면 동아리원만큼 데이터 변경이 필요해 비효율적이고, 한 개라도 변경되지 않은 행이 있으면 데이터가 상이해진다.
학번 | 학생명 | 학과명 | 동아리 |
1 | 바트 | 컴퓨터공학과 | 피아노 |
2 | 호머 | 물리학과 | 피아노 |
3 | 리사 | 컴퓨터공학과 | 피아노 |
... | |||
1000 | 네드 | 컴퓨터공학과 | 피아노 |
정규화의 단계
1NF, 2NF, 3NF, BCNF, 4NF, 5NF, 6NF까지 있지만 핵심정규형은 BCNF, 5NF이며 그 외 정규형을 목표로 하지 않는다.
BCNF까지 상세히 알아본다.
1NF
1NF를 만족하기 위한 조건은 "릴레이션"이여아한다.
테이블과 릴레이션은 비슷하지만 다르고 제1정규화를 통해 릴레이션과 같아진다.
릴레이션의 특징
- 순서를 고려하지 않음
- 중복되는 튜플이 존재하지 않음
- NULL값을 갖지 않음
- 값은 의미가 있는 원자 단위여야 한다.
학생명 | 학과명 | 동아리 |
바트 | 컴퓨터공학과 | 피아노 |
마술 | ||
마지 | 신소재공학과 | 밴드 |
▼ 원자성 만족
학생명 | 학과명 | 동아리 |
바트 | 컴퓨터공학과 | 피아노 |
바트 | 컴퓨터공학과 | 마술 |
마지 | 신소재공학과 | 밴드 |
2NF
1NF를 만족하고 후보키의 진부분집합에서 키가 아닌 속성에 대해 부분함수 종속성을 제거한다.
학생명 | 학과명 | 동아리 |
바트 | 컴퓨터공학과 | 피아노 |
바트 | 컴퓨터공학과 | 마술 |
마지 | 신소재공학과 | 밴드 |
▼ 부분 함수 종속성 제거
학생명 | 학과명 |
바트 | 컴퓨터공학과 |
바트 | 컴퓨터공학과 |
마지 | 신소재공학과 |
학생명 | 동아리 |
바트 | 피아노 |
바트 | 마술 |
마지 | 밴드 |
정규화 전의 릴레이션을 보면, 학생명과 학과가 후보키이다.
후보키중 하나인 이름을 알면 동아리를 알 수 있으므로 함수 종속이 존재하던 것을 제거했다.
함수 종속을 제거할 때 원래의 릴레이션을 무손실 분해시켜야하는데
종속 관계가 있는 속성만 추출해서 새로운 릴레이션을 만들고(학생명, 동아리)
원래 릴레이션은 분리된 속성을 제외한 릴레이션으로 존재한다.(학생명, 학과)
3NF
2NF를 만족하고 추이 함수 종속성을 제거하는 작업
추이 함수 종속성은 키가 아닌 속성 사이의 함수 종속성을 의미하는데 2NF와는 후보키와 키가 아닌 속성 사이의 함수 종속성을 제거했다는 점에서 차이가 있다.
아이디 | 우편번호 | 광역시/도 | 시/군/구 | 읍/면/동 |
1 | 00000 | 대전 | 중구 | 대흥동 |
2 | 34343 | 대전 | 유성구 | 학하동 |
▼ 추이 함수 종속성 제거
아이디 | 우편번호 |
1 | 00000 |
2 | 34343 |
우편번호 | 광역시/도 | 시/군/구 | 읍/면/동 |
00000 | 대전 | 중구 | 대흥동 |
34343 | 대전 | 유성구 | 학하동 |
후보키인 아이디를 알면 우편번호를 알 수 있고, 우편번호를 알면 나머지 주소를 알 수 있기 때문에 우편번호를 기준으로 2NF와 동일하게 릴레이션을 분해한다.
BCNF
3NF를 만족하고 키가 아닌 속성에서 후보키의 진부분집합에 대한 함수 종속성을 제거하는 작업
사용자 | 핸드폰 | 회사 |
김삼득 | 갤럭시 | 삼성 |
이삼식 | 아이폰 | 애플 |
한동숙 | V50 | 엘지 |
회사 | 사장 |
삼성 | 이재용 |
애플 | 스티브 잡스 |
엘지 | 구광모 |
▼ BCNF
사용자 | 회사 |
김삼득 | 삼성 |
이삼식 | 애플 |
한동숙 | 엘지 |
회사 | 핸드폰 | 사장 |
삼성 | 갤럭시 | 이재용 |
애플 | 아이폰 | 스티브 잡스 |
엘지 | V50 | 구광모 |
사용자가 어떤 핸드폰을 선택했는지에 따라 회사가 정해지기 때문에 2NF를 만족한다
또 키가 아닌 속성인 회사를 통해 사장을 알 수 있으므로 분할하여 3NF를 만족한다.
하지만 스마트폰 붐으로 인해 회사를 알면 핸드폰을 알 수 있는 상황이다.
따라서 핸드폰은 후보키로 되어있고 회사는 후보키가 아니므로, 회사를 후보키로 지정하고 핸드폰을 후보키에서 제외한다.
BCNF는 함수 종속성이 모두 제거된 상태의 정규형으로 이상의 정규화에서는 함수 종속성에 의한 무손실 분해를 할 수 없다.
정규화의 장점
1. 이상현상 발생을 줄일 수 있다.
2. 데이터베이스 구조 확장 및 변경 시 사이드 이펙트를 줄일 수 있다.
정규화의 단점
릴레이션 분해로 JOIN연산의 증가로 질의에 대한 응답이 느려질 수 있다