
정규화를 통한 성능 향상 전략
- 정규화를 수행한다는 것은 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반 속성을 의존자로 하여 입력/수정/삭제 이상현상을 제거하는 것이다.
- 데이터의 중복 속성을 제거하고 결정자에 의해 동일한 의미의 일반 속성이 하나의 테이블로 집약되므로 한 테이블의 데이터 용량이 최소화되는 효과가 있다.
- 정규화된 테이블은 데이터를 처리할 때 속도가 빨라질 수도 있고 느려질 수도 있는 특성이 있다.
- 정규화된 데이터 모델은 조회 시에는 처리 조건에 따라 성능이 향상 혹은 저하된다.
- 정규화된 데이터 모델은 입력/수정/삭제 시 무조건 성능이 향상된다.
정규화 용어
용어 | 설명 |
정규화 (Normalization) |
- 함수적 종속성(FD : functional Dependency) 등과 같은 이론에 근거하여 관계형 데이터베이스 테이블의 삽입, 삭제, 갱신 이상(Anomaly) 현상 발생을 최소화하기 위해 좀 더 작은단위의 테이블로 설계하는 과정. 즉, 데이터 모델을 정규형에 맞도록 고치는 과정 |
정규형 (NF : Normal Form) |
- 정규화 규정, 정규화 결과에 의해 도출된 데이터 모델이 갖춰야 할 특성 |
함수적 종속성 (FD : Functional Dependency) |
- 테이블의 특정 칼럼 A의 값을 알면 다른 컬럼 B 값을 알 수 있을 때, 컬럼 B는 컬럼 A에 함수적 종속성이 있다고 함 (ex. 고객명은 고객주민등록번호에 함수적 종속성이 있음) |
결정자 (Determinant) | - 함수적 종속성 설명에서, 칼럼 A를 결정자라고 함 (ex. 주민등록번호는 결정자임) |
다치종속 (MVD : MultiValued Dependency) |
- 결정자 컬럼 A에 의해 컬럼 B의 값을 다수 개 알 수 있을 때, 컬럼 B는 컬럼A에 다치종속 되었다고 함 - (ex. 학번을 알면 해당 학생의 다수 개 수강과목을 알 수 있을때, 수강과목은 학번에 다치종속관계임) |
정규화 효과 및 장점
- 상호 종속성이 강한 데이터 요소들을 분리, 독립된 개념(엔터티, 테이블)으로 정의하게 됨에 따라 High Cohesion & Loose Coupling(높은 응집도 & 낮은 결합도) 원칙에 충실해지며 이로 인해 유연성이 극대화 됨
- 개념이 좀 더 세분화됨에 따라 해당 개념에 대한 재활용 가능성이 높아짐 (일반적으로 각종 참조 모델은 정규형을 만족하고 있음)
- Non-key(일반 속성) 데이터 요소가 한번 만 표현됨에 따라 중복이 최소화 됨(데이터 품질확보, 저장공간 절약, DML 성능)
정규화 이론
- 1차, 2차, 3차, 보이스코드정규화는 함수종속성에 근거하여 정규화를 수행하고
- 4차 정규화는 속성의 값이 여러 개 발생하는 다치종속
- 5차 정규화는 조인에 의해 발생하는 이상현상 제거로 정규화 수행한다.
정규화 유형 | 설명 |
1차 정규화 | - 함수종속, 복수의 속성값을 갖는 속성을 분리, 속성의 원자성 확보 |
2차 정규화 | - 함수종속, 주식별자에 완전종속적이지 않은 속성의 분리 - 부분종속 속성(PARTIAL DEPENDENCY ATTRIBUTE)을 분리 |
3차 정규화 | - 함수종속, 일반속성에 종속적인 속성의 분리 - 이전종속 속성(TRANSITIVE DEPENDENCY)을 분리 |
보이스코드 정규화 | - 함수종속, 결정자안에 함수종속을 가진 주식별자 분리 |
4차 정규화 | - 다가종속(다치종속)(Multi-Valued Dependency) 속성분리 |
5차 정규화 | - 결합종속(Join Dependency)일 경우는 두 개 이상의 N개로 분리 |
제 1정규형
- 모든 속성은 원자 값을 가져야 함
- 다중 값을 가질 수 있는 속성은 분리되어야 함
* 제 1 정규형 위반
- 회원 엔터티
- 연락처 속성에 두 가지 값이 들어가 있음
- 이럴 경우 제 1 정규형 위반임
* 제 1정규형 위반 해소
- 회원 엔터티
>> 연락처 속성을 삭제
- 회원연락처 엔터티
>> 기존의 회원 엔터티에서 회원연락처 엔터티를 추가하여 제 1정규형을 만족하게 함
>> 회원연락처 엔터티 추가
제 2정규형
- 제 1정규형을 만족하는 상태에서 모든 Non-key 컬럼은 기본 키 전체에 종속되어야 함
- 기본 키에 종속적이지 않거나 기본 키 일부 컬럼(들)에만 종속적인 컬럼은 분리되어야 함
* 제 2 정규형 위반
- 고객 주문 엔터티
>> 고객등급, 고객명은 #고객아이디 + #주문순번에 종속되는게 아니라 #고객아이디에만 종속이 된다.
주문순번을 몰라도 고객아이디만 있으면 고객명 , 고객등급 조회 가능
- 올바른 집합 단위에 기초하고 있지 않음
- 갱신 시에 갱신 이상이 발생할 가능성 존재
- 주문 시마다 고객정보를 저장해야 함
- 고객 정보의 중복이 발생할 수 있음
- 고객 정보를 모르면 주문이 불가능함
* 제 2 정규형 위반 해소
- 고객 주문 엔터티
>>모든 속성이 식별자만으로 함수 종속 가짐
>> 식별자의 일부에만 종속하는 속성 없음
- 고객 엔터티
제 3 정규형
- 제 2 정규형을 만족하는 상태에서 일반속성들간에도 종속관계가 존재하지 않아야 함
- 일반속성들 간 종속관계가 존재하는 것들은 분리되어야 함
* 제 3 정규형 위반
- 고객 엔터티
>> 직업코드에 직업명이 종속됨 .
- 식별자를 제외한 일반 속성 끼리 함수 종속이 발생
- 식별자 이외의 키 간 발생하는 함수의 종속
* 제 3 정규형 위반 해소
- 고객 엔터티
- 직업 엔터티
>> 직업 엔터티를 추가하여 일반 속성 끼리의 함수 종속을 제거함
정규화와 성능
- 정규화를 수행해서 조인이 발생하게 되더라도 효율적인 인덱스 사용을 통해 조인 연산을 수행하면 성능 상 단점은 거의 없다.
- 정규화를 수행하여 소량의 테이블이 생성된다면 소량의 테이블을 먼저 읽어 조인 연산을 수행하면 되므로 성능상 유리할 수 있다.
- 정규화가 제대로 되지 않으면 동일한 종류의 속성을 여러 개 가지고 있어서 과다한 인덱스가 만들어 질 수 있는데 정규화를 한다면 하나의 인덱스만 만들어도 된다.
반정규화된 테이블의 성능저하 사례 - 1
- 정부보관금관서원장에서 데이터를 조회하는 것이나, 관서와 정부보관금관서원장을 조인하여 데이터를 조회하나 처리성능은 사용자가 느끼기에는 거의 차이가 나지 않는다. PK가 걸려있는 방향으로 조인이 걸려 Unique Index를 곧바로 찾아서 데이터를 조회하기 때문에, 하나의 테이블에서 조회하는 작업과 비교했을 떄 미미하게 성능 차이가 날 뿐 사용자에게 크게 영향을 줄 만큼 성능이 저하되는 일은 없는 것이다.
- '관서등록일자가 2010년 이후 관서를 모두 조회하라'는 SQL구문을 처리하는 것으로 바꾸면, 2차 정규화된 테이블이 훨씬 빠르다. 정규화 되지 않은 모델에서는 불필요하게 납부자번호만큼 누적된 데이터를 읽어서 결과를 구분하여 보여주어야 하지만 정규화된 모델에서는 관서수만큼만 존재하는 데이터를 읽어 곧바로 결과를 보여주기 때문이다.
반정규화된 테이블의 성능저하 사례 - 2
- 특정 매각 장소에 대해 매각일자를 찾아 매각내역을 조회하려면 100만건의 데이터를 읽어 매각일자 컬럼을 기준으로 DISTINCT하여 매각일자별 매각내역과 조인되어야 한다.
- 매각일자를 PK로 하고 매각시간과 매각장소는 일반속성이 되었다. 정규화를 적용했기 때문에 매각일자를 PK로 사용하는 매각일자별매각내역과도 관계가 연결된다.
- 따라서 업무흐름에 따른 정확한 데이터 모델링 표기도 가능해지고, 데이터 건수가 약 5천건인 매각기일 테이블이 드라이빙 테이블이 되므로 성능 상 유리하다.
반정규화된 테이블의 성능저하 사례 - 3
- 하나의 테이블에 9개가 반복적으로 나열이 되어 있을 때는 인덱스 생성이 어려웠지만 정규화되어 분리된 이후에는 인덱스 추가생성이 0개가 되었다. 또한 분리된 테이블 모델기능분류코드에서 PK인덱스를 생성하여 이용함으로써 성능이 향샹될 수 있다.
반정규화된 테이블의 성능저하 사례 - 4
- 일별재고 엔터티 조회 시 과도한 부화가 발생할 수 있고 과도한 인덱스를 생성해야 한다.
- 일별재고와 일별재고상세를 구분함으로써 일별재고에 발생되는 트랜잭션의 성능저하를 예방할 수 있게 되었다.
함수적 종속성 (Functional Dependency)에 근거한 정규화 수행 필요
- 함수의 종속성(Functional Dependency)은 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭하는 것이다.
- 이 때 기준값을 결정자(Determinant)라 하고 종속되는 값을 종속자(Dependent)라고 한다.
- 종속자는 근본적으로 결정자에 함수적으로 종속성을 가지고 있음
- 이름, 출생지, 주소는 주민등록번호에 함수 종속성을 가지고 있음
- 즉 "주민등록번호가 이름, 출생지, 주소를 함수적으로 결정한다." 라고 말할 수 있다.
'자격증 정리 > SQLD' 카테고리의 다른 글
Chapter 02 ) 데이터 모델과 성능 (3) - 반정규화와 성능 (1) | 2023.03.08 |
---|---|
Chapter 02 ) 데이터 모델과 성능 (1) - 성능 데이터 모델의 개요 (0) | 2023.03.08 |
Chapter 01 ) 데이터 모델링의 이해 연습문제 오답노트 (0) | 2023.03.08 |
Chapter 01 ) 데이터 모델링의 이해 (5) - 식별자 (0) | 2023.03.06 |
Chapter 01 ) 데이터 모델링의 이해 (4) - 관계 (0) | 2023.03.06 |