최보름달

[SQL] 정규화/ 반정규화 본문

문송한 회사생활/SQL 공부

[SQL] 정규화/ 반정규화

PieMoon 2020. 7. 19. 16:55

정규화

- 데이터를 결정하는 결정자에 의해 함수적 종속을 가지고 있는 일반속성을 의존자로 하여 입력/수정/삭제 이상을 제거하는 것.

 

정규화의 특징

- 정규화를 하면 기본적으로 데이터에 대한 중복성을 제거하여 주고 데이터가 관심사별로 처리되는 경우가 많기 때문에 성능이 향상되는 특징이 있다.

- 데이터 중복속성을 제거하므로 데이터 용량이 최소화 되는 효과가 있다. 

- 데이터 입력/수정/삭제할 때 처리 성능이 향상된다. 

- 물론 엔티티가 계속 발생되므로 SQL 문장에서 조인이 많이 발생하여 이로 인한 성능저하가 나타나는 경우도 있다. 

 

함수적 종속성(Functional Dependancy)에 근거한 정규화 수행 필요

- 함수적 종속성은 데이터들이 어떤 기준값에 의해 종속되는 현상을 지칭하는 것이다. 

 

- '사람' 이라는 엔티티에 주민번호, 이름, 출생지, 호주 라는 속성이 있다고 하자. 여기서 이름, 출생지, 호주 라는 속성은 주민등록번호 속성에 종속된다. 

주민등록번호 -> (이름, 출생지, 호주) 

즉, "주민등록번호가 이름, 출생지, 호주를 함수적으로 결정한다." 데이터들은 대부분 이런 함수 종속성을 가지고 있다. 

 

- 정규화의 궁극적인 목적은 반복적인 데이터를 분리하고 각 데이터가 종속된 테이블에 적절하게 배치되도록 하는 것이므로 이 함수의 종속성을 이용하여 적절하게 배치하는 작업에 이용된다. 

 

- 데이터는 속성간의 함수종속성에 근거하여 정규화되어야 한다. 


반정규화(역정규화. De-Normalization)

- 정규화를 수행하지 않은 모델링

- 개발과 운영의 단순화를 위해 중복, 통합, 분리 등을 수행하는 데이터 모델링 기법.

- 데이터 무결성이 깨질 위험을 무릅쓰고 중복해서 반정규화를 적용하는 이유는, 데이터 조회시 디스크 i/o가 많아서 성능이 저하되거나 경로가 너무 멀어 조인으로 인한 성능저하가 예상되거나, 칼럼을 계산하여 읽을 때 성능이 저하될 것이 예상되기 때문에 적용한다. 

- 반정규화 시 데이터 입력, 수정, 삭제할 때 성능이 떨어지게 된다. 

 

반정규화 적용방법

- 반정규화 대상을 조사하고 다른 방법을 적용할 수 있는지 검토한 후에 반정규화를 적용하도록 한다. 

 

반정규화 기법

1. 테이블 반정규화

- 테이블 병합: 1:1관계 테이블 병합, 1:M관계 테이블 병합, 슈퍼/서브타입 테이블 병합

- 테이블 분할: 수직/수평 분할

- 테이블 추가: 중복, 통계, 이력, 부분 테이블 추가 

 

2. 칼럼 반정규화

- 중복 컬럼, 파생 컬럼, 이력테이블 컬럼, PK에 의한 칼럼 추가, 응용시스템 오작동을 위한 칼럼 추가 

 

3. 관계 반정규화

- 중복관계 추가: 추가적인 관계를 맺는 방법. 

 

테이블과 칼럼의 반정규화는 데이터 무결성에 영향을 미치지만, 관계의 반정규화는 데이터 무결성을 깨뜨릴 위험을 갖지 않고서도 테이터처리의 성능을 향상시킬 수 있는 반정규화 기법이 된다. 

 

 

* 한국데이터진흥원에서 출간한 SQL 전문가 가이드 2013 Edition을 요약했습니다