데이터베이스 정규화는 관계형 데이터 모델에서 데이터의 중복성을 제거하여 이상 현상을 방지하고, 데이터의 일관성과 정확성을 유지하기 위해 무손실 분해하는 과정이다.
데이터 정규화에는 다음과 같은 단계가 있다.
데이터베이스의각 컬럼이 원자 값(하나의 값)을 가지도록 하는 과정이다.
즉, 각컬럼은 하나의 데이터만 저장하며, 다중 값을 갖지 않는다.
제 1 정규화 적용 전
수강과목ID 수강과목 수강자 1 AI 홍길동 2 JAVA 이순신, 홍길동 3 JavaScript 유관순
이 테이블에서는 다음과 같은 문제가 발생할 수 있다.
홍길동이 JAVA 과목을 Python로 바꿀 경우 이순신이 듣고 있는 JAVA 과목도 바뀌어 버린다.
홍길동이 JAVA 과목 수강을 취소할 경우 같이 듣고 있는 이순신의 수강 정보도 삭제된다.
제 1 정규화 적용 후
수강과목ID 수강과목 수강자 1 AI 홍길동 2 JAVA 이순신 2 JAVA 홍길동 3 JavaScript 유관순
다음은 각 컬럼은 하나의 데이터만 저장하는제1 정규화를 적용 시킨 테이블이다.
이러한 제1 정규화가 적용된 테이블을"제1 정규형 테이블"이라고 한다.
제 1 정규화 적용 후 장점
제1 정규화를 완료한 테이블에서, 부분 함수 종속성을 제거하는 과정이다.
모든 기본 키의 부분집합에 의존하는 컬럼들을 분리해 새로운 테이블을 만들고 그 사이의 관계를 설정한다.
쉽게 설명하면,현재 테이블의 주제와 관련없는 컬럼을 다른 테이블로 빼는 작업이다.
제 2 정규화 적용 전
회원ID 회원이름 회원주소 상품코드 상품명 가격 101 홍길동 서울시 S100 소파 200 102 이순신 부산시 B100 침대 300 103 유관순 대전시 S100 소파 200 101 홍길동 서울시 S101 의자 150
이 테이블에서는다음과 같은 문제가 발생할 수 있다.
새로운 상품이 등록 된다면 테이블의 구조상 회원 정보와 연관된 컬럼도 채워야 하는 문제가 발생한다.
홍길동이 주소를 경기도로 변경하면 홍길동이 있는 연관 행들을 모두 수정해야 한다.
일부 행을 수정하지 못할 경우 데이터의 범주 불일치가 발생한다.
의자 상품을 삭제 한다면, 상품의 가격, 상품코드가 사라지고 의자를 구매한 회원의 정보 또한 삭제되는 문제가 발생한다.
제 2 정규화 적용 후
- 회원 테이블
회원ID 회원이름 회원주소 101 홍길동 서울시 102 이순신 부산시 103 유관순 대전시
- 상품 테이블
상품코드 상품명 가격 S100 소파 200 B100 침대 300 S101 의자 150
- 주문 테이블
회원ID 상품코드 101 S100 102 B100 103 S100 101 S101
제 2 정규화 적용 후 장점
제2 정규화를 완료한 테이블에서, 이행적 함수 종속성(transitive dependency) 을 제거하는 과정이다.
이행적 함수 종속이란 A -> B, B -> C, A -> C 종속인 관계를 말한다.
제 3 정규화 적용 전
학생ID 학생이름 강의ID 강의명 교수ID 교수이름 S001 김영희 L001 수학 P001 이은택 S001 김영희 L002 영어 P002 김진희 S002 이철수 L001 수학 P001 이은택 S003 최민수 L003 과학 P003 박현정
이 테이블은 다음과 같이 이행적 함수 종속이 발생한다.
이러한 이행적 종속성 때문에 중복 데이터와 데이터 무결성 문제가 발생할 수 있다.
새 과목을 추가하려고 할 때, 아직 수강하는 학생이 없으면 해당 과목을 추가하기 어렵다.
왜냐하면 학생ID와 학생이름이 NULL로 남게 되기 때문이다.
예: 화학이라는 새로운 강의를 P004 교수님(‘최선영’)이 맡게 되었다면, 이렇게 입력하면 학생ID와 학생이름이 NULL이 되어 알맞지 않은 데이터가 저장된다.
강의를 담당하는 교수님이나 강의명이 변경될 경우, 중복 데이터로 인해 여러 행을 수정해야 하고, 그로 인해 일관성이 깨질 수 있다.
예: 수학 강의명이 고급수학으로 변경되었다면, 모든 연관 행의 데이터를 수정해야 한다.
특정 강의를 수강한 학생이 삭제되면, 해당 강의와 관련된 정보도 함께 제거된다.
예: 김영희 학생이 수학 강의를 수강취소했다면 수학 강의에 대한 정보와
수학 강의를 담당하는 이은택 교수님에 대한 정보가 손실된다.
제 3 정규화 적용 후
- 학생 정보 테이블
학생ID 학생이름 S001 김영희 S002 이철수 S003 최민수
- 강의 정보 테이블
강의ID 강의명 교수ID L001 수학 P001 L002 영어 P002 L003 과학 P003
- 교수 정보 테이블
교수ID 교수이름 P001 이은택 P002 김진희 P003 박현정
- 수강 신청 정보 테이블
학생ID 강의ID S001 L001 S001 L002 S002 L001 S003 L003
제3 정규화 적용 후 장점