[SQLD 도전기] 데이터 모델과 성능(2) - 정규화와 성능
본문 내용은 모두 필자가 공부하며 직접 정리한 내용입니다.
Kdata 데이터자격검정의 SQL 개발자(SQLD) 가이드를 참고하였습니다.
─지난 글 보기─
과목 1 데이터 모델링의 이해
제 2장 데이터 모델과 성능
제 2절 정규화와 성능
1. 정규화를 통한 성능 향상 전략
ㆍ정규화 : 데이터 모델링 시, 기본적으로 데이터에 대한 중복성을 제거하여 주고
데이터가 관심사별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징을 가지고 있다.
물론 엔터티가 계속 발생되므로 SQL문장에서 조인이 많이 발생하여 이로 인한 성능 저하가 나타나는 경우도 있지만
이런 부분은 사례별로 유의하여 반정규화를 적용하는 전략이 필요하다.
(데이터가 꼬이는 것을 방지하기 위해 테이블을 잘게 나누는 것)
정규화를 수행하면 항상 조회 성능이 저하되어 나타날까?
정규화를 수행한다는 것은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는
일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것이다.
데이터의 중복속성을 제거하고 결정자에 의해 동일한 의미의 일반속성이 하나의 테이블로 집약되므로
한 테이블의 데이터 용량이 최소화되는 효과가 있다.
따라서 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.
★정규화 쉽게 이해하기★
ㆍ제1정규형(1NF) : 원자성 - 모든 속성은 반드시 하나의 값만 가져야 한다.
제1정규형에 위배되기 때문에 제1정규화가 필요하다.
ㆍ제2정규형(2NF) : 부분 종속 - 모든 속성은 반드시 모든 기본키에 종속되어야 한다.
기본키 일부에만 종속되어서는 안된다.
위의 그림에서 기본키는 주문번호, 음료코드 2개로 이루어져있는데
음료명이라는 속성은 음료코드에만 종속되기 때문에 제2정규형에 위배된다.
그렇게 되면 데이터 이상 현상이 발생되므로 제2정규화를 실시해야 한다.
ㆍ제3정규형(3NF) : 이행 종속 - 기본키를 제외한 모든 속성간에는 서로 종속될 수 없다.
각 단계별로 정규화 수행 목적이 생각나지 않는다면 그림을 외우는 것도 하나의 좋은 방법일 거 같다.
관련 문제를 몇 번 풀다보면 정규화에 대한 개념이 금방 잡힐 것으로 예상된다.
다음에는 반정규화와 성능에 관한 내용을 정리하여 포스팅하겠습니다.