Совет №50
Бесфактовая таблица фактов? Звучит как «китовая креветка»?
Материал опубликован с разрешения компании
Автор оригинала: Bob Becker (все
статьи)
Перевод на русский язык: Антон Задорожный
Оригинальный документ располагается .
Бесфактовая таблица фактов кажется оксюмороном, как китовая креветка.
Как у вас может быть таблица фактов, которая не содержит ни одного
факта? Мы обсуждали основы бесфактовых таблиц фактов несколько раз
в наших книгах и статьях. В этом совете разработчику мы используем
бесфактовую таблицу фактов для дополнения наших стратегий медленно
меняющихся измерений.
Как вы возможно помните, бесфактовая таблица фактов фиксирует связи
многие-ко-многим между измерениями, но не содержит численных или
текстовых фактов. Они часто используются для записи событий и дополнительной
информации. Типичные примеры бесфактовых таблиц фактов включают:
Выявление акций продвижения продукта (для определения продвигаемых
продуктов которые не продаются)
Ведение посещаемости студентов или событий регистрации
Ведение страховых случаев
Определение перечней строений, услуг, оборудования для госпиталя
или университета
За дополнительной информацией о бесфактовых таблицах фактов обратитесь
к ранним статьям Ральфа .
В сегодняшнем совете разработчику, представьте, что мы разрабатываем
схему для крупной компании потребительского сектора (выберите вашу
любимую потребительскую отрасль – авиаперевозки, страхование, кредитные
карты, банковская, коммуникации или интернет-магазин). Компания
ведет бизнес с десятками миллионов клиентов. В дополнение к типичным
требованиям в виде транзакционной схемы для отслеживания поведения
клиента и периодического снимка для определения тенденций, нашим
бизнес-партнерам необходима возможность просмотреть точный профиль
клиента (включающий десятки атрибутов) в любой момент времени. Постоянные
читатели могут помнить рассуждения Ральфа о похожей ситуации в 13-ом
совете. Он наметил технику, кода измерение само фиксирует события
изменения профиля как медленно меняющееся измерение Тип 2 (SCD Type
2), вместо того чтобы создавать таблицу фактов для захвата транзакций
по профилю. Как бы ни было, мы не сможем использовать технику совета
№13 для текущего сценария, дающего большие объемы данных (миллионы
клиентских строк) и потенциально высокую изменчивость (десятков
атрибутов).
Давайте представим, что мы разрабатываем основное клиентское измерение
(с атрибутами SCD Type 2 как минимум) вместе с четырьмя «мини» измерениями
для ведения изменений кредитных атрибутов клиента, его предпочтений,
маркетинговой сегментации/предрасположенностей и клиентской географии.
Пять внешних ключей входят таблицу фактов уровня транзакции, так
же как и в месячный снимок. Эти внешние ключи представляют «состояние»
клиента, когда строка факта загружена. Пока все неплохо, но нам
по-прежнему нужно поддерживать отображение профиля клиента в произвольный
момент времени. Мы рассматриваем использование другой таблицы фактов
периодического снимка, загружаемой ежедневно для каждого клиента,
фиксирующая в момент времени связи между клиентским измерением и
связанными мини-измерениями. Это приводит к загрузке десятков миллионов
снимков каждую ночь, за несколько лет исторических данных. Мы быстро
делаем расчеты и предпочитаем рассмотреть другие варианты.
В этот момент вы думаете: «Это отлично, но как насчет китовой креветки?».
Мы можем использовать бесфактовую таблицу фактов для фиксации во
времени связей между клиентским измерением и мини-измерениями. Мы
загружаем строку факта в бесфактовую таблицу каждый раз, когда происходит
изменение Типа 2 в базовом клиентском измерении или меняется связь
между базовым измерением и мини-измерениями. Эта бесфактовая таблица
фактов содержит внешние ключи к базовому клиентскому измерению и
каждому из четырех мини-измерений для загруженной строки. Затем
мы украсим эту конструкцию двумя датами, начала и окончания, для
определения профиля клиента в произвольный момент времени. Мы также
можем добавить простое измерение для обозначения текущего профиля
клиента, в дополнение к измерению «причина изменения» для указания
причины, приведшей к загрузке новой строки в бесфактовую таблицу
фактов.
Если вы нашли в сети интересные ссылки на ресурсы по технологиям
хранилищ данных, OLAP, CRM или data mining, и хотите поделиться
ими с другими, присылайте их.
Я с удовольствием размещу их на этом сайте.