정규화(Normalization): 데이터 정합성(데이터의 정확성과 일관성을 유지하고 보장)을 위해 엔터티를 작은 단위로 분리하는 과정이다. 정규화를 할 경우 데이터 조회성능은 처리조건에 따라 향상되는 경우도 있고 저하되는 경우도 있지만 입력, 수정, 삭제 성능은 일반적으로 향상된다. 하지만 모든 엔터티를 무작정 분리하면 안되기 때문에 일정한 룰이 존재한다.
*유사한 속성이 반복되는 반복그룹이 있을 때는 1차 정규화를 진행하고 유사 속성에 모두 인덱스를 생성할 경우 조회 성능은 향상될지 모르나 입력, 수정, 삭제 성능은 오히려 저하되므로 무분별한 인덱스 생성은 지양해야한다.
반정규화: 데이터의 조회 성능을 향상시키기 위해 데이터의 중복을 허용하거나 데이터를 그룹핑하는 과정이다. 여기서 주의할 점은 조회성능은 향상시킬 수 있으나 입력, 수정, 삭제 성능은 저하될수 있으며 데이터 정합성 이슈가 발생할 수 있다. 반정규화의 과정은 정규화가 끝난 후 거치게 되며 정규화와 마찬가지로 일정한 룰이 존재한다.
컬럼 반정규화
관계 반정규화(중복관계 추가)
트랜잭션(transaction): 테이터를 조작하기 위한 하나의 논리적인 작업 단위
성능 데이터 모델링: 데이터베이스의 성능을 향상시키기 위해 설계 단계부터 성능과 관련된 사항들이 모델링에 반영될 수 있도록 한다. 성능 모델링의 방법은 정규화, 반정규화, 테이블 통합, 테이블 분할 등이 있다.
정규화: 데이터의 무결성을 보장하기 위해 정규화를 수행한다.
정규화가 항상 조회성능을 저하시키는 것은 아니며 반정규화를 함으로써 조회 성능이 확실히 좋아지는 상황에서만 반정규화를 하는 것이 바람직하다.
반정규화 기법
성능 데이터 모델링의 순서
엔터티의 모든 일반속성은 반드시 모든 주식별자에 종속되어야 하며 주식별자가 단일식별자가 아닌 복합식별자인 경우 일반속성이 주식별자의 일부에만 종속될 수 있는데 이런 경우 2차 정규화 대상이 된다.
한 테이블에 속성의 개수가 과도하게 많을 경우 조회 성능을 향상시키기 위해 자주 쓰이는 속성과 그렇지 않은 속성을 나누어 수직 분할할 수 있다. 수직 분할은 반정규화 기법 중 하나이며 분할된 테이블은 1:1 관계를 이룸
함수의 종속성을 고려하여 이상 현상이 생기지 않도록 테이블을 분할하는 것은 정규화 기법
이상현상
트랜잭션은 데이터를 조작하기 위한 논리적인 작업 단위로, 데이터 모델로 표현할 수 있으며 데이터는 트랜잭션 범위로 묶일 수 있다.
정규화
공통 속성을 조회하는 빈도수가 개별 속성을 조회하는 빈도수보다 높기 때문에 공통 속성과 개별 속성을 별도로 관리하는 슈퍼-서브 타입의 설계가 적절하다.
중복관계추가는 관계의 반정규화 기법 중 하나로 데이터의 무결성을 깨뜨릴 위험성 없이 데이터 처리 성능을 향상시킬 수 있는 기법이다.