Как создать таблицу фактов истории?

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

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

  2. документ - documentId, номер, тип

  3. адрес - addressId, город, улица, дом, квартира

отношения между (Лицо и документ)-один ко многим и (лицо и адрес)-много ко многим.

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

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

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

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

ожидаемый результат по нашему запросу для вопроса 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 ответов


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

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

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

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

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

тогда у вас будет таблица фактов как

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

затем, присоединившись к "kc", вы можете показать текущую информацию об измерении лица / документа / адреса. Если вы присоединились к "k", вы можете показать информацию об измерении исторического лица/документа/адреса.

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

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

кроме того, вы можете иметь таблицу фактов как

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

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

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

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