데이터베이스에 대해 공부하다보면 정규화(Normalization)이란 단어를 자주 접하게 된다.
정규화는 데이터베이스 설계에서 중요한 부분을 차지하므로 공부해보자.
데이터베이스 정규화란?
중복되는 데이터를 제거하고 각 릴레이션의 중복된 종속성을 여러개의 릴레이션에 분할하여 저장공간을 효율적으로 사용하고 이상(Anomaly)현상을 방지하는 작업이다.
이상현상이란?
이상현상에는 아래와 같이 3가지의 종류가 있다.
- 삽입 이상(Insertion Anomaly)
불필요한 다른 데이터의 부재로 데이터를 테이블에 추가할 수 없는 경우를 말한다.
이름 나이 직종 한승훈 30 서비스업 현재진 26 서비스업 유동근 29 ? - 삭제 이상(Delete Anomaly)
이름 나이 보유차량명 한승훈 30 건강한 두다리 유동근 29 K3 현재진 26 스파크 - 갱신 이상(Update Anomaly)
이름 수강과목 연락처 한승훈 선형대수 010-1234-1234 한승훈 재무관리 010-1234-1234 유동근 컴퓨터구조 010-2222-3333 현재진 화성학 010-4444-5555
정규형
데이터베이스의 정규화는 정규형이라는 단계들을 통해 진행된다.
해당 포스트에서는 가장 일반적인 3개의 정규형을 다루겠다.
- 제 1 정규형
관계형 데이터베이스의 릴레이션은 각 속성이 원자값(Atomic Value, 더이상 쪼갤 수 없는 값)을 가져야 한다는 것이다.
아래의 테이블 같은 경우 Social Network 칼럼의 값이 2개 이상인 경우가 있으므로 제 1 정규형을 만족하지 않는다고 할 수 있다.
학생 테이블이름 학과 핸드폰 번호 한승훈 금융공학 010-1111-2222, 010-3333-4444 유동근 컴퓨터공학 010-5555-6666 현재진 실용음악 010-7777-8888
제 1 정규형을 만족 시키기 위해 아래와 같이 분리할 수 있다.
학생 테이블
이름 학과 핸드폰 번호 한승훈 금융공학 010-1111-2222 한승훈 금융공학 010-3333-4444 유동근 컴퓨터공학 010-5555-6666 현재진 실용음악 010-7777-8888 - 제 2 정규형
오직 복합키를 기본키로 가지고 있는 경우에만 제 2 정규화를 진행하며
(유일키를 가진 경우 이미 제 2 정규형을 만족하기 떄문)
제 2 정규형에서는 부분 종속성이 없는 조건을 만족 시킨다.
(부분 종속성이란 종속자가 복합키를 구성하는 일부 키에만 종속되는 경우를 말한다.)
예시 테이블을 보자.
수강 테이블
학번 과목 이름 강의실 100 선형대수 한승훈 강의실 101 101 컴퓨터구조 유동근 강의실 203 102 화성학 현재진 강의실 305
기본키가 아닌 강의실 속성의 경우 과목 속성만으로도 알 수 있으므로 제 2 정규형의 조건을 위반하게 된다.
이런 경우 아래와 같이 릴레이션을 나눠 개선한다.
수강 테이블
학번 과목 이름 100 선형대수 한승훈 101 컴퓨터구조 유동근 102 화성학 현재진
과목 테이블
과목 강의실 선형대수 강의실 101 컴퓨터구조 강의실 203 화성학 강의실 305 - 제 3 정규형
제 3 정규형의 조건은 제 1, 2 정규형의 조건을 만족함과 동시에 이행적 종속이 없는 것이다.
이행적 종속이라는 것은 X로 Y를 알 수 있고(X -> Y), Y로 Z를 알 수 있어(Y -> Z) X -> Z가 성립하는 종속이다
아래의 예를 보자.
수강 과목 테이블
이름 과목 수강료 한승훈 선형대수 600,000원 유동근 컴퓨터구조 1,000,000원 현재진 화성학 800,000원
위의 테이블의 경우 과목은 이름에 의해 결정되고 수강료는 과목에 의해 결정되므로 이행적 종속이 성립된다.
아래와 같이 개선할 수 있다.
이름 과목 한승훈 선형대수 유동근 컴퓨터구조 현재진 화성학 과목 수강료 선형대수 600,000원 컴퓨터구조 1,000,000원 화성학 800,000원
'IT 지식' 카테고리의 다른 글
경쟁상태(Race Condition)에 대해 (0) | 2021.12.16 |
---|---|
프로세스(Process)와 스레드(Thread)의 차이 (0) | 2021.12.13 |
HTTP와 HTTPS의 차이 (0) | 2021.12.10 |