Каков наилучший практический подход для управления ключевыми отношениями в Data Vault v2.0.2 - PullRequest
0 голосов
/ 16 января 2020

Мы находимся в процессе внедрения нового хранилища данных с использованием методологии Data Vault в базе данных Snowflake. Наше намерение состоит в том, чтобы придерживаться самых последних стандартов и передовых практик, насколько мы можем, например, использовать только вставку и пытаться избегать различных анти-паттернов, таких как, когда это практически возможно, связывание ключей ( см. Комментарии здесь для обсуждения ключей управления ).

Ниже приведен упрощенный пример раздела наших данных, относящихся к рейтингам, присвоенным объектам недвижимости с течением времени (представьте себе рейтинги отелей или аналогичные).

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

PropertyRatingID  PropertyID   RatingSchemeID RatingID   EffectiveDate
1                 1            1              1          2020-01-01
2                 1            1              2          2020-01-02
3                 1            1              1          2020-01-03
4                 1            2              3          2020-01-02
5                 1            2              4          2020-01-03

Соответствующая информация, касающаяся структуры данных.

  • PropertyRatingID - это ключ идентификации для обеспечения уникальности и не имеет делового значения.
  • В любой момент времени свойство может иметь только одну оценку для одной схемы, но может оцениваться по нескольким схемам
  • PropertyID, RatingSchemeID и EffectiveDate не обязательно должны быть уникальной комбинацией.
  • EffectiveDate не представляет дату, в которую запись была введена в систему, и ее можно задним числом перенести в прошлое на значительный промежуток времени, создавая двухпалатную ситуацию между датой вступления в силу и датой применения изменения.
  • PropertyID, RatingSchemeID и RatingID являются внешними ключами для других таблиц, предоставляющих описательные данные. Свойство уже существует как отдельный концентратор в нашей модели.

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

Date        Scheme1Rating  Scheme2Rating
2020-01-01  1              NULL
2020-01-02  2              3
2020-01-03  1              4
2020-01-04  1              4

Моя первоначальная попытка смоделировать это создать концентратор для RatingID, ссылку между свойством и рейтингом и спутник, присоединенный к ссылке, используя PropertyRatingID, содержащий всю другую информацию (в первую очередь, BrandID и EffectiveDate), чтобы сделать его мультиактивным. Это оказалось очень трудным для использования, потому что ключевой фактор изменений (PropertyID и BrandID был распределен между каналом и спутником).

С точки зрения двусторонней ситуации, основное внимание будет уделено получению последнего записанного набора дат вступления в силу (т. е. самой последней системной даты) для создания истории рейтингов с течением времени, например, EffectiveEndDate становится эквивалентом LEAD(EffectiveDate) OVER(PARTITION BY PropertyID,RatingID ORDER BY EffectiveDate ASC) в исходной таблице. Хотя мы не будем регулярно использовать записи значений из прошлых системных времен, мы будем время от времени рассматривать их на произвольной основе c, чтобы объяснить изменения в истории между отчетными периодами.

Простое решение было бы объединить несколько таблиц в исходной системе, чтобы сгладить данные, разделить их и создать спутник по схемам оценок и присоединить его непосредственно к концентратору свойств. Это дало бы нам краткосрочное решение, но было бы негибким (требующим нового концентратора для любых новых рейтинговых схем) и все же требовало бы, чтобы эти спутники были мультиактивными, чтобы поддерживать текущую дату в исходной системе с несколькими действующими датами.

Я считаю, что для идеального решения требуется, по крайней мере, еще один концентратор, связанный с ключом вождения, и, возможно, второй, связанный с присвоением рейтинга имуществу. Большая часть моего чтения (см. Предыдущую ссылку и эту статью ) подразумевает, что мой спутник должен быть подключен к концентратору, а не к ссылке.

Каким будет эффективный подход к модели это с использованием методологии Data Vault?

Мне было бы интересно обсудить преимущества предлагаемого решения, например, дополнительные «слабые» концентраторы по сравнению с решением основных проблем в более сложных запросах.

1 Ответ

1 голос
/ 17 января 2020

Этот сценарий, насколько я понимаю, больше похож на LINK / SAT с PropertyID, RatingSchemeID в качестве естественного ключа LINK (ссылка на Property и RatingScheme HUB) и RatingID в SAT (свисающий с LINK).

...