Как создать таблицу фактов истории? - PullRequest
10 голосов
/ 21 мая 2011

У меня есть несколько сущностей в моем хранилище данных:

  1. Person - с атрибутами personId, dateFrom, dateTo и другими, которые могут быть изменены, например, фамилия, дата рождения и т. д. - медленно меняющееся измерение

  2. Document - идентификатор документа, номер, тип

  3. Address - addressId, город, улица, дом, квартира-Мани.

    Моя цель - создать таблицу фактов истории, которая может ответить на следующие вопросы:

    1. Какие лица с какими документами жили по указанному адресу в определенную дату?

    2, Какая история жителей имеет определенный адрес в определенный интервал времени?

    Это не только для того, для чего разработан DW, но я думаю, что это самая сложная вещь в дизайне DW.

    Например, мисс Браун с personId = 1, документы с documentId = 1 и documentId = 2 использовался по адресу с addressId = 1 с 01 января 2005 года по 02 февраля 2010 года, а затем был перемещен по адресу addressId = 2, где он жил с 02 марта 2010 года и до текущей даты (NULL?).Но она поменяла фамилию на миссис Грин с 04/05/2006 и ее первый документ с documentId = 1 на documentId = 3 с 06/07/2007.Мистер Блэк с personId = 2, documentId = 4 проживал по адресу addressId = 1 с 02/03/2010 до текущей даты.

    Ожидаемый результат по нашему запросу для вопроса 2, где addressId = 1 и интервал временис 01.01.2000 по настоящее время, должно быть примерно таким:

    Строки:

    last_name="Brown", documentId=1, dateFrom=01/01/2005, dateTo=04/04/2006
    
    last_name="Brown", documentId=2, dateFrom=01/01/2005, dateTo=04/04/2006
    
    last_name="Green", documentId=1, dateFrom=04/05/2006, dateTo=06/06/2007
    
    last_name="Green", documentId=2, dateFrom=04/05/2006, dateTo=06/06/2007
    
    last_name="Green", documentId=2, dateFrom=06/07/2007, dateTo=02/01/2010
    
    last_name="Green", documentId=3, dateFrom=06/07/2007, dateTo=02/01/2010
    
    last_name="Black", documentId=4, dateFrom=02/03/2010, dateTo=NULL
    

    У меня была идея создать таблицу фактов с составным ключом (personId, documentId, addressId, dateFrom) но я понятия не имею, как загрузить эту таблицу и затем получить ожидаемый результат с этой структурой.

    Я буду рад любой помощи!

1 Ответ

3 голосов
/ 27 мая 2011

Интересный вопрос @Argnist!

Итак, чтобы создать какой-то общий язык для моего примера, вам нужен

  • DimPerson (PK = kcPerson, суггоратный ключ для уникального Persons = kPerson,тип 2 dim)
  • DimDocument (PK = kcDocument, ключ suggorate для уникальных документов = kDocument, тип 2 dim)
  • DimAddress (PK = kcAddress, ключ suggorate для уникальных адресов = kAddress, тип 2dim)

Коллега написал короткий блог об использовании двух суррогатных ключей для объяснения вышеупомянутых dim ' Использование двух суррогатных ключей в измерениях '.

Я бы всегда добавлял DimDate с PK в форме ггггммдд в любое хранилище данных с дополнительными столбцами атрибутов.

Тогда ваша таблица фактов будет иметь вид

  • FactHistory (FKs = kcPerson,kPerson, kcDocument, kDocument, kcPerson, kPerson, kDate) плюс любые дополнительные меры.

Затем, присоединяясь к «kc», вы можете отобразить текущую информацию об измерениях Персона / Документ / Адрес.Если вы присоединились к «k», вы можете отобразить историческую информацию об измерении «Человек / Документ / Адрес».

Недостатком этого является то, что этой таблице фактов требуется одна строка для каждой комбинации человек / документ / адрес / дата,Но на самом деле это очень узкая таблица, так как в таблице есть только несколько внешних ключей.

Преимущество этого в том, что вы очень легко можете задавать вопросы, которые вы задавали.

В качестве альтернативы вы могли бы иметь свою таблицу фактов как

  • FactHistory (FKs = kcPerson, kPerson, kcDocument, kDocument, kcPerson, kPerson, kDateFrom, kDateTo) плюс любые дополнительные меры.

Это, очевидно, намного более компактно, но запрос становится более сложным.Вы также можете просмотреть таблицу Fact, чтобы упростить запрос!

Выбор решения зависит от частоты изменения данных.Я подозреваю, что это не изменится так быстро, поэтому альтернативный дизайн таблицы фактов может быть лучше.

Надеюсь, это поможет.

...