
Ранее в статье «Теория и практика DWH: что такое согласованные факты и измерения по Кимбаллу и зачем они нужны» разбирали:
кто такой Кимбалл
каков его подход
что такое измерения
Теперь разберём медленно меняющиеся измерения – slowly changing dimensions. Для начала разберём контекст – что пишет сам Кимбалл про SCD:

В книге Кимбалла упоминается, что:
типы SCD описаны от простого к сложному
много раз повторяется мысль про простоту/понятность как важную часть подхода
Что, если развить эту мысль и расположить все типы SCD на одной шкале?
Задаём шкалу:

Размещаем на ней все типы SCD:

Типы SCD можно условно разделить на смысловые группы.
При этом каждая из групп отвечает на свой вопрос:

Как типы SCD отвечают на поставленные перед ними вопросы – посмотрим детально по каждому типу.
И сразу договоримся - далее мы будем рассматривать измерение "пользователь" (user). Чтобы изменения в данных были понятны, возьмём для примера Того-Кого-Нельзя-Называть. Сначала это был мальчик (Том Реддл), а кем он стал потом - подскажут воспоминания из детства (и примеры SCD).
SCD 0
Сохранение оригинала

При этом типе SCD то, что попало к нам в DWH, остаётся таковым без изменений.
На вопрос "быть или не быть изменениям?" SCD 0 отвечает: "не быть".

SCD 1
Перезапись

При этом типе SCD то, что используется в DWH, перезаписывается, т.е. имеет последнее актуальное значение.
На вопрос "быть или не быть изменениям?" SCD 1 отвечает: "быть".
Но при этом и SCD 0, и SCD 1 не фиксируют историю изменений.

SCD 2
Добавление новой строки

Начиная с этого типа начинается отслеживание истории изменений.
На вопрос "что добавлять?" SCD 2 отвечает: "строку".
При этом для использования SCD 2 в таблице измерений нужны дополнительные столбцы, по которым можно определить статус/период актуальности строки.

SCD 3
Добавление нового атрибута

На вопрос "что добавлять?" SCD 3 отвечает: "столбец" ( = атрибут).
При данном типе для одной строки измерения мы можем видеть одновременно два значения.

SCD 4
Добавление мини-измерения

На вопрос "что добавлять?" SCD 4 отвечает: "таблицу".
В данном контексте у нас есть
- измерение (таблица),
и мы добавляем
- мини-измерение (ещё одну отдельную таблицу)
Этот тип полезен тогда, когда у измерения есть как
- условно стабильные атрибуты (имя пользователя),
- так и часто изменяемые (возраст, адрес, когда последний раз заходил в сервис и т.д.)
Последуем идеям Кимбалла из книги, и SCD 4 рассмотрим на примере демографических данных:
- основное измерение - dim_user
- мини-измерение - dim_user_demography
Чтобы понять детально, предположим, мы онлайн-кинотеатр. В таблице фактов (fct_playback_session) мы через ключи измерения и мини-измерения сможем получить полную картину данных:

При этом мы снимаем с себя головную боль от "распухания" таблицы измерений от частого изменения атрибутов. Вот что об этом пишет сам Кимбалл:

Осторожно: далее идут гибридные типы SCD.
Они более сложные и реже используются на практике:
если вы хотите получить полное представление о них, можно погрузиться в примеры
если же вам нужна общая картина - можете переходить сразу к разделу Все типы SCD на шкале в конце обзора
SCD 5
Добавление мини-измерения и внешней опоры типа 1

На вопрос "что составлять?" SCD 5 отвечает: "4 + 1".
То есть мы берём за основу SCD 4 (добавление мини-измерения) + добавляем SCD 1 (перезапись).
Если в SCD 4 мы просто добавляли отдельную таблицу, то в SCD 5 мы точно так же добавляем отдельную таблицу, но при этом ещё связываем её с основным измерением.

В результате в SCD 5 мы можем видеть полную картину данных не только через таблицу фактов, но и через само измерение:

При этом важно понимать, что SCD 5 - это уже гибридный тип, который комбинирует ранее разобранные более простые типы, и к нему надо относиться с осторожностью (чтобы не запутать пользователя). Вот как пишет об этом Кимбалл:

SCD 6
Добавление атрибута типа 1 к измерению типа 2

На вопрос "что составлять?" SCD 6 отвечает: "3 + 1 + 2".
То есть мы добавляем атрибут (SCD 3) типа 1 (SCD 1) к измерению типа 2 (SCD 2). Здесь мы видим полную картину данных в самом измерении (без использования таблицы фактов).
Как и ранее, Кимбалл обращает внимание, что использование гибридного типа может быть сложным, и нужно соблюдать баланс:

SCD 7
Двойные измерения типа 1 и типа 2

На вопрос "что составлять?" SCD 7 отвечает, не используя предшествующие типы.
SCD 7 использует:
- измерение, отслеживающее историю (table, SCD 2)
- измерение вечно актуальное (view, SCD 1)
При этом технически есть два способа интеграции с таблицей фактов:
- используя один и тот же ключ
- используя два разных ключа
(впрочем, как видно на примерах, в итоге картина данных не отличается)



Все типы SCD на шкале
Итак, мы разобрали все виды SCD.
Время взглянуть на заполненную шкалу:

Дополним эту шкалу тем, как были описаны эти подходы:
- что сам Кимбалл отмечает как базовые подходы (ссылка 1)
- что как дополнительные (ссылка 2)
В качестве источника в этот раз обратимся к сайту kimballgroup.com

а также дополним шкалу общим пониманием распространённости подходов на практике:
