Совет №8 Совершенное
разделение истории с помощью медленно изменяющегося измерения типа 2
Материал опубликован с разрешения компании Ralph Kimball Associates
Автор оригинала: Ральф Кимбал (все
статьи)
Перевод на русский язык: Константин Лисянский
Оригинальный документ располагается здесь.
Подход медленно изменяющегося измерения типа 2 является другим
видом разделения. Вы можете назвать это логическим разделением истории.
В подходе типа 2 каждый раз, когда нам встречается изменение записи
в таблице измерения, мы создаём новую запись и добавляем её в существующую
таблицу измерения. Примером такого изменения может быть изменение
описания продукта, когда что-то меняется в продукте, например, тип
упаковки, а код продукта (например, штрих-код) не изменяется. Как
хранители хранилища данных мы дали обет тщательно отслеживать историю,
поэтому мы должны следить как за новым описанием продукта, так и
за старым.
Тип 2 медленно изменяющегося измерения требует специальной обработки
ключа измерения, в нашем примере ключа измерения "Продукт".
Мы должны присвоить обобщённый ключ, поскольку мы не можем использовать
в качестве ключа складской номер. Это порождает целую дискуссию
об анонимных суррогатных ключах, которая интенсивно обсуждалась
ранее. Обратитесь к статьям "Суррогатные
ключи. Контролируйте идентификаторы строк формированием суррогатных
ключей в хранилищах данных" и "Суррогатные
ключи. Конвейерная обработка суррогатных ключей", в которых
обсуждаются проблемы суррогатных ключей
Остановитесь и поразмыслите немного о том, как вы использовали ключ
измерения до того момента, когда вы добавляете новую запись в таблицу
измерения как это описано выше. До сегодняшнего дня вы использовали
"старый" суррогатный ключ, когда бы вы ни создавали новую
запись в таблице фактов, описывающую действия с продуктами.
Сегодня происходят две вещи. Во-первых, мы полагаем, что изменения
в типе упаковки продукта вступают в действие для новых данных фактической
таблицы, которые мы получаем сегодня. Во-вторых, это означает, что
после того, как мы создаём новую запись в таблице измерения с новым
суррогатным ключом, мы используем этот суррогатный ключ во всех
новых сегодняшних записях в таблице фактов.
МЫ НЕ ВОЗВРАЩАЕМСЯ К ПРЕДЫДУЩИМ ЗАПИСЯМ ТАБЛИЦЫ ФАКТОВ, ДЛЯ ТОГО
ЧТОБЫ ИЗМЕНИТЬ КЛЮЧ ПРОДУКТА.
Старая запись о продукте в таблице измерения всё ещё корректно
указывает на все предыдущие исторические данные, а новая запись
о продукте в таблице измерения будет теперь указывать на все записи,
начиная с сегодняшнего дня, пока у нас снова не возникнет необходимость
внести ещё одно изменение по типу 2.
Вот что мы имеем в виду, когда говорим, что медленно изменяющееся
измерение совершенно разделяет историю. Если вы визуализируете это,
вы по-настоящему поймёте этот приём проектирования.
Заметьте, что когда вы вводите ограничение на какое-либо поле в
измерении, например, на название продукта, которое не затрагивается
изменением типа упаковки, вы автоматически выбираете как старые,
так и новые записи таблицы измерения, а также вы автоматически присоединяетесь
ко всей истории продукта в таблице фактов. И только в случае, когда
вы делаете ограничение или группировку по типу упаковки, SQL спокойно
делит историю на два режима.
Здесь обсуждается суть подхода типа 2. Подход типа 2 может быть
усовершенствован и сделан более мощным путём соответствующего размещения
временных отметок в измерении, но эти временные отметки
являются дополнительными "удобствами", которые не требуются
для базового деления истории. Обратитесь к статье по адресу http://www.dbmsmag.com/9802d05.html
чтобы познакомиться с одним приложением медленно изменяющегося измерения
с временными отметками.
Если вы нашли в сети интересные ссылки на ресурсы по технологиям
хранилищ данных, OLAP, CRM или data mining, и хотите поделиться
ими с другими, присылайте их.
Я с удовольствием размещу их на этом сайте.