역시 사람은 책을 읽어야 한다. 학교에서 배웠던 것과는 또 다른 내용이 나온다. 학교에서 데이터베이스 과목을 들었을 때는 RDBMS 만 배웠다. 때문에 정규화를 통해 데이터를 분산시켜 디스크 I/O의 발생을 최소화하거나 메모리 부하를 줄인다고 알고 있었고, 너무 과한 정규화는 조인성능이 떨어져 문제가 된다 하여 적절한 비정규화도 중요하다고 배웠다. 근데 오늘 읽은 부분은 데이터 마트에는 정규화가 필요 없다고 말하고 있다.
여기서는 테이블을 트랜잭션 테이블과 마스터 테이블로 구분한다. 트랜잭션은 한번 기록하면 변하지 않는 테이블이며 마스터는 상황에 따라 다시 쓰이는 테이블이다. '판매이력'이라는 이미 기록된 트렌잭션 테이블이 있다면 그 안에 있는 고객 ID를 참고하는 고객 테이블 상품 ID를 참고하는 상품 테이블 등은 마스터 테이블이다. 이건 RDBMS 얘기이고 빅데이터를 다루는 데이터 웨어하우스 안에서는 트랜잭션 == 팩트 테이블, 마스터 테이블 == 디멘젼 테이블로 불린다. 따라서 많은 디멘젼 테이블을 결합하는 과정을 비정규화라고 하며 결국 하나의 팩트 테이블만 남게 된다.
다만 이렇게 비정규화는 앞서 말했듯 팩트 테이블이 메모리 용량을 초과한 시점에서 디스크 I/O가 발생하고 그 대기 시간이 쿼리의 지연시간으로 이어진다. 여기까지는 알고 있는 사실이다.
하지만 요즘은 사정이 바뀌었다. 열지향 스토리지는 칼럼 단위로 데이터가 저장되기 때문에 열이 아무리 늘어나도 성능에 영향을 주지 않는다. 그렇다면 처음부터 팩트테이블에 모든 칼럼을 포함해 두고 쿼리의 실행 시에는 케이블 결합을 하지 않는 것이 간편하다. 더군다나 문자열을 그대로 저장해도 아주 작게 압축되기 때문에 테이블 디멘전이 필요 없고 하나의 거대한 팩트 테이블만 있으면 충분하다는 것이다. 그리고 이러한 팩트 테이블을 비정규화 테이블이라고 한다.
주의할 점은 이것은 어디까지나 데이터 베이스가 MPP기반의 데이터베이스와 같이 열지향 데이터 베이스어야 한다는 전제조건이 깔려 있다. 데이터 마트가 아닌 데이터 웨어하우스의 경우 여전히 스타 스키마가 그 성능이 우수하며 아직 학생 된 입장에서 대규모 빅데이터를 만져볼 일은 없으니 열심히 정규화 비정규화도 공부해야 한다.