두 layout
- Star schema. Dimension 하나가 비정규화된 테이블 하나야.
dim_customers에name, country, region, segment가 한 row 에 다 들어 있어. 그림을 그리면 fact 테이블이 가운데, dimension 이 사방으로 뻗어 — 그래서 "star". - Snowflake schema. Dimension 을 더 정규화한 거야.
dim_customers엔region_key,dim_regions엔continent_key, 그 너머에dim_continents. Dimension 에서 sub-dimension 이 갈라져 나가는 모양 — 그래서 "snowflake".
김빠지는 진실
분석 작업에선 star 가 거의 항상 이겨. 이유는 이래:
- Query 당 join 이 적어 — 실행은 빨라지고 SQL 은 또렷해져.
- BI 도구가 star schema 위에선 깔끔한 query 를 만들어 내.
- 비정규화된 dimension 은 머리에 넣기도 쉬워.
- Storage 는 싸 — 비정규화로 몇 byte 더 쓰는 비용은 가독성이 벌어 주는 것에 비하면 없는 셈이야.
Snowflake schema 의 자리도 있긴 해 — sub-dimension 이 거대하고 독립적으로 변할 땐 떼어내는 게 맞을 수 있어. 그래도 새 분석 warehouse 의 default 는 star schema 고, snowflake 는 평평하게 두는 비용이 구체적으로 아플 때만 가는 길이야.