비정규화된 구조
- 데이터 웨어하우스는 일반적으로 비정규화된 데이터 모델을 사용
- 이는 OLTP 보다 훨씬 방대한 양의 데이터를 분석용 쿼리를 통해 조회하는 OLAP의 이용 목적에 따른 것임
- OLTP의 정규화된 데이터 모델과 차이를 가짐
- 비정규화된 데이터 구조를 통해 조인 연산을 줄이고 쿼리 성능을 향상시킴
다차원 모델링
- 데이터 웨어하우스는 주로 다차원 모델링을 채택함
- 조인으로 인한 셔플링의 비용은 굉장히 크므로 조인을 줄이는 형태
- 비즈니스 프로세스 관계가 명확하게 드러나는 데이터 모델이기도 함
- 이 모델은 차원 테이블과 팩트로 구분하여 구성
- 차원 테이블: 분석의 관점을 제공하는 설명적 속성들을 포함
(예: 상품, 지역, 유저 등)
- 팩트 테이블: 측정값과 지표를 저장하며 차원 테이블과 연결하는 형태
(예: 구매기록 등)
- 주로 두 가지 스키마 유형이 있음
- Star Schema
- Snowflake Schema
Star Schema

- 스타 스키마는 팩트 테이블을 중심으로 각 차원 테이블들과 관계를 맺는 구조로 이루어짐
- 차원 테이블과 팩트 테이블은 기본키와 외래키로 관계 형성이 이루어짐
- Snowflake Schema보다 반정규화된 구조로 데이터 중복이 일부 발생할 수 있다.
- 더 많은 공간을 차지
- 데이터 무결성 유지가 더 어려울 수 있음
- 대신 조인을 적게 사용하므로 쿼리를 더 간단하고 빠르게 만듬
Snowflake Schema

- 차원 테이블의 계층적 형태를 포함하는 일종의 스타 스키마이다.
- 스타 스키마보다 정규화되어 데이터 중복을 최소화함
- 기본키와 외래키를 통해 팩트 테이블에 연결된 차원 디멘션 및 하위 차원 테이블로 구성
- 테이블을 분할함으로써 중복성을 줄이고 메모리 낭비를 방지
- 중복 데이터가 없으므로 유지 관리가 더 용이함
- 설계와 이해가 스타스키마보다 복잡하다.
- 쿼리 실행시 더 많은 조인을 요구하므로 스타스키마에 비해 검색 효율이 떨어짐
Slowly Changing Dimensions
- SCD는 시간이 지남에 따라 천천히 예측할 수 없게 변하는 차원 데이터를 처리하는 기법
- 차원 데이터의 변경 이력을 추적하면서 데이터 무결성을 유지
- 보통 두 개의 timestmap 필드를 갖는 것이 좋음
- 이 경우 컬럼의 성격에 따라 어떻게 유지할지 방법이 달라짐
SCD Type 0
- 한번 쓰고 나면 바꿀 이유가 없는 경우들
- 한번 쓰고 나면 갱신되지 않고 고정되는 필드들
- 예) 고객 테이블이라면 회원 등록일, 재품 첫 구매일
SCD Type 1
- 데이터가 새로 생기면 덮어쓰면 되는 컬럼들
- 처음 레코드 생성시에는 존재하지 않았지망 나중애 생기면서 채우는 경우
- 예) 고객 테이블이라면 연간소득 필드
SCD Type 2
- 특정 entity에 대한 데이터가 새로운 레코드로 추가되어야 하는 경우
- 예) 고객 테이블에서 고객의 등급 변화
- 등급 컬럼의 값이 regular 에서 vip로 변화하는 경우 변경시간도 같이 추가되어야 함
SCD Type 3
- SCD Type 2와 동일한데, 이 경우에는 레코드를 새로 추가하지 않고. 컬럼을 새로 추가함
- 예) 고객 테이블에서 등급 컬럼의 값이 regular 에서 vip로 변화하는 경우
- previous_tier라는 컬럼 생성
- 변경시간도 별도 컬럼으로 존재해야함
SCD Type 4
- 특정 entity에 대한 새로운 데이터를 새로운 DImension 테이블에 저장하는 경우
- 제일 많이 사용하는 타입
- 예) 별도의 테이블로 저장하고 이 경우 아예 일반화할 수도 있음