Вопрос

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

  1. Человек - с атрибутами PersonID, DateFrom, DateTo и другими они могут быть изменены, напримерфамилия, дата рождения и так далее - медленно меняющееся измерение

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

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

Отношения между (Лицом и Документом) - Один ко многим, а (Лицом и Адресом) - Многие ко многим.

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

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

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

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

Например, мисс Браун с PersonID=1, документами с documentId=1 и documentId=2 проживала по адресу с AddressID=1 с 01/01/2005 по 02/02/2010, а затем была перемещена в AddressID=2, где проживала с 03.02.2010 по текущую дату (NULL?).Но с 05.04.2006 она сменила фамилию на миссис Грин, а ее первый документ с documentId=1 на documentId= 3 с 07.06.2007.Мистер Блэк с PersonID=2, documentId= 4 проживал по адресу AddressID=1 с 03.02.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), но я понятия не имею, как загрузить эту таблицу, а затем получить ожидаемый результат с помощью этой структуры.

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

Это было полезно?

Решение

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

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

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

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

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

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

  • История фактов (FKs=kcPerson, kPerson, kcDocument, kDocument, kcPerson, kPerson, kDate) плюс любые дополнительные меры.

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top