[Database] 정규화
정규화
정규화란 하나의 릴레이션에 하나의 의미만 존재할 수 있도록 릴레이션을 분해해나가는 과정으로 중복성을 최소화하고 정보의 일관성을 보장하기 위한 개념이다.
정규화의 필요성
- 자료의 저장 공간을 최소화한다.
- 자료의 불일치를 최소화시킨다.
- 자료의 삽입, 삭제, 갱신 시 이상 현상을 방지한다.
삽입 이상 : 튜플을 삽입했을 때 삽입 의도와 연관 없는 관계까지 삽입되는 현상
삭제 이상 : 임의의 튜플을 삭제하였을 때 관련된 관계성까지 모두 삭제되는 현상
갱신 이상 : 임의의 데이터를 수정하였을 때 임의만 수정되어 관계된 데이터가 일관성이 없게 되는 현상.
정규화의 과정
- 제1정규형(1NF) : 하나의 튜플에서 여러 개의 값이 들어와 원자성을 가지지 못하는 경우에 도메인 값을 분해하면 1정규형이라고 한다.
학번 | 성명 | 수강과목 |
10 | 홍길동 | 전산기구조, 운영체제 |
11 | 이순신 | 자료구조 |
12 | 김철수 | 엑셀, 운영체제 |
→
학번 | 성명 | 수강과목 |
10 | 홍길동 | 전산기구조 |
10 | 홍길동 | 운영체제 |
11 | 이순신 | 자료구조 |
12 | 김철수 | 엑셀 |
12 | 김철수 | 운영체제 |
- 제2정규형(2NF) : 릴레이션이 제1정규형에 속하고 기본키에 속하지 않는 모든 속성들이 기본키에 완전 함수 종속이면 제2정규형이라고 한다.
학번 | 수강과목 | 학년 | 점수 |
10 | 전산기구조 | 2 | 76 |
11 | 운영체제 | 2 | 56 |
12 | 자료구조 | 1 | 89 |
13 | 엑셀 | 3 | 23 |
14 | 운영체제 | 3 | 89 |
위 릴레이션은 학번과 수강과목을 기본키로 가진다고 하자.
이 때 학년 속성은 수강과목이랑은 상관없이 학번으로만 종속 관계를 가지고 있으므로 부분 함수 종속이라고 한다.
따라서 다음과 같이 릴레이션 2개로 분리하여 기본키에 속하지 않는 모든 속성들이 기본키에 완전한 함수 종속 상태가 되도록 하는 것을 2정규형이라고 한다.
학번 | 수강과목 | 점수 |
10 | 전산기구조 | 76 |
11 | 운영체제 | 56 |
12 | 자료구조 | 89 |
13 | 엑셀 | 23 |
14 | 운영체제 | 89 |
학번 | 학년 |
10 | 2 |
11 | 2 |
12 | 1 |
13 | 3 |
14 | 3 |
- 제3정규형(3NF) : 릴레이션이 제2정규형에 속하고 기본키에 속하지 않는 모든 속성이 기본키에 이행적 함수 종속이 아니면 제3정규형이라고 한다. (즉 기본키를 제외하고 칼럼 간에 종속성이 생기는 경우 3정규형의 대상)
학번 | 학과 | 지도교수 |
10 | 컴퓨터공학 | 김유신 |
11 | 수학 | 강감찬 |
12 | 통계학 | 이순신 |
13 | 경제학 | 김철수 |
14 | 영문학 | 홍길동 |
이행적 함수 종속이란 A→B, B→C, A→C 관계를 이행적 함수 종속이라고 하는데 위에서 학번이 학과를 결정하고, 지도교수 역시 선택되었지만 또한 학과가 결정됨으로써 지도교수가 정해진 것이므로 이행적 함수 종속이다.
학번 | 학과 |
10 | 컴퓨터공학 |
11 | 수학 |
12 | 통계학 |
13 | 경제학 |
14 | 영문학 |
학과 | 지도교수 |
컴퓨터공학 | 김유신 |
수학 | 강감찬 |
통계학 | 이순신 |
경제학 | 김철수 |
영문학 | 홍길동 |
- 보이스 코드 정규형(BCNF) : 비결정자에 의한 함수 종속을 제거하여 모든 결정자가 후보키가 되도록 하는 정규형을 의미한다.
- 제4정규형(4NF) : 1:1인 함수 종속 관계가 아닌 1:N 형태로 종속되는 관계를 다중치 종속 관계라고 하며 이러한 종속 관계를 제거하는 것이 4정규형이다. 즉 하나의 A 값에 여러 개의 B가 존재하게 되면서 컬럼 B, C가 독립적일 때 4정규형 대상이다.
과목 | 교수 | 출판사 |
운영체제 | 이순신 | 영진 |
운영체제 | 강감찬 | 영진 |
운영체제 | 이순신 | 홀인원 |
운영체제 | 강감찬 | 홀인원 |
위와 같이 과목(운영체제) 하나의 값에 여러 명의 교수와 출판사가 종속된다. 이 때 릴레이션은 데이터의 중복으로 인하여 이상 현상이 발생하기 쉽다. 만약 과목이 10개, 교수가 10명, 출판사가 10개라면 10 x 10 x 10 = 1000개의 데이터가 발생한다. 따라서 다음과 같이 분리한다.
과목 | 교수 |
운영체제 | 이순신 |
운영체제 | 강감찬 |
과목 | 출판사 |
운영체제 | 영진 |
운영체제 | 홀인원 |
- 제5정규형(5NF) : 후보키로 통하지 않은 조인 종속을 제거하는 것이 5정규형이다.
가격 | 장르 | 대여로 |
25,000 | 액션 | 2,500 |
20,000 | 액션 | 2,000 |
20,000 | 액션 | 2,500 |
20,000 | 전쟁 | 2,500 |
위와 같은 릴레이션이 있다. 이 때 가격을 기본키로 하여 릴레이션을 분리하면 다음과 같이 된다.
가격 | 장르 |
25,000 | 액션 |
20,000 | 액션 |
20,000 | 전쟁 |
가격 | 대여료 |
25,000 | 2,500 |
20,000 | 2,500 |
20,000 | 2,000 |
위 릴레이션을 다시 조인하면 원래 릴레이션에 존재하지 않는 튜플이 생성되었다. 분해된 릴레이션이 원래의 릴레이션으로 복원될 수 있다면 5정규형을 만족한 것이고 그렇지 않다면 새롭게 릴레이션을 추가해야 한다.
가격 | 장르 | 대여료 |
25,000 | 액션 | 2,500 |
20,000 | 액션 | 2,000 |
20,000 | 액션 | 2,500 |
20,000 | 전쟁 | 2,500 |
20,000 | 전쟁 | 2,000 |
따라서 다음과 같은 릴레이션을 추가해야 정상적으로 조인이 되고 5정규형을 만족한다.
장르 | 대여료 |
액션 | 2,500 |
액션 | 2,000 |
전쟁 | 2,500 |
반 정규화
반 정규화
정규화된 엔티티, 속성, 관계를 시스템의 성능 향상과 개발 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법을 의미한다.
반정규화 사용 시기
- 정규화에 충실하였으나, 처리 속도에 문제가 있는 경우
- 다량의 범위를 자주 처리해야 하는 경우
- 특정 범위의 데이터만 자주 처리하는 경우
- 처리 범위를 줄이지 않고는 속도를 개선할 수 없는 경우
반정규화 유형
- 중복 테이블 추가
- 다량의 범위, 특정 범위의 데이터만 자주 처리되는 경우에 사용한다.
- 테이블 조합
- 두 개 이상의 테이블이 매번 같이 사용되는 경우에 사용한다.
- 테이블 분할
- 수평 분할 : 테이블을 레코드를 기준으로 분할하는 것으로 특정 범위별 사용 횟수의 차이가 많은 경우 해당 범위 별로 테이블을 분할하는 방법이다.
- 수직 분할 : 테이블을 열을 기준으로 분할하는 것으로 열 별로 사용 횟수의 차이가 많은 경우 테이블을 분할하는 방법이다.
- 열 중복화
- 대량의 데이터에서 성능 향상을 위해 파생 열이 추가되어야 하는 경우에 사용한다.