Хранилище данных - медленно меняющиеся измерения со связями "многие ко многим"

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

Таблица FactMoney


ProjectKey int

PersonKey int

Денежные средстваКоличество денег


Два измерения определяются следующим образом:

DimProject (измерение типа 0, т. е. статическое)


ProjectKey int

Имя проекта varchar (50)


DimPerson (медленно меняющееся измерение типа 2)


PersonKey int

PersonNaturalKey int

PersonName varchar (50)

EffectiveStartDate datetime

EffectiveEndDate datetime

IsCurrent бит


Пока все довольно просто. Теперь я представлю концепцию категории людей.

DimCategory


CategoryKey int

CategoryName varchar (50)


И построить отношения M2M между DimPerson и DimCategory

BridgePersonCategory


PersonKey int

CategoryKey int


Итак, у людей может быть 1..n категорий.

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

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

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


person Scott Herbert    schedule 01.11.2013    source источник
comment
Спасибо, я сделаю это - надеюсь, я не совершу злодеяний в отношении этикета путем перекрестной публикации.   -  person Scott Herbert    schedule 01.11.2013
comment
Я разместил вопрос по адресу dba.stackexchange.com/questions/52628/   -  person Scott Herbert    schedule 01.11.2013


Ответы (3)


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

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

person momobo    schedule 02.11.2013
comment
Спасибо, я думаю, что ваш комментарий соответствует (очень редкому) ответу, который я нашел здесь - community.altiusconsulting.com/ - person Scott Herbert; 04.11.2013
comment
Интересная ссылка. Спасибо - person momobo; 04.11.2013

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

Только если вы хотите изменить категорию человека. Потому что меняет только имя человека, а не ключ человека в таблице DimPerson. Связь между DimPerson и PersonCategory остается действительной. Когда имя человека изменится, он останется в той же категории. То есть человек в любой момент времени мог быть только в одной категории. Чтобы преодолеть это, вы должны создать SCD2 в соединительной таблице (PersonCategory), чтобы связь была установлена ​​с ключами и датами действия.

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

Пожалуйста, дайте мне знать для дальнейших разъяснений.

person Vijaybabu Sukumar    schedule 08.10.2015

Потому что меняет только имя человека, а не ключ человека в таблице DimPerson.

Я бы сказал, что это неверно, если у вас есть SCD2 на DimPerson, как сказал @ScottHerbert. Поскольку в этом случае PK (я предполагаю, что это PersonKey) меняется, только BK (я предполагаю, что это PersonNaturalKey) останется прежним. Но вы не будете строить отношения на бизнес-ключе, потому что тогда вы потеряете историзацию того, какой человек принадлежал к какой категории.

На мой взгляд, вам нужно будет добавить новую версию в Person Cat с новым ПК от человека и старым ПК из категории.

То же самое и с категорией: если имя меняется, эта категория получит новый ПК, который вы должны добавить в таблицу моста.

person sspaeti    schedule 28.09.2016