Что если ваш факт имеет несколько экземпляров измерения?
В схеме "звезда" для магазина одежды есть факт транзакции, чтобы отразить все купленное. Это обычно будет иметь обычную дату, время, размеры суммы, но также будет иметь человека, чтобы указать, кто его купил. В некоторых случаях вы можете иметь несколько человек в одной транзакции. Как это моделируется, если внешний ключ находится в таблице фактов и, следовательно, может указывать только на одного человека?
3 ответа
Стандартным методом в размерном моделировании является использование таблицы "Мост". Классическими примерами, которые вы найдете, являются группы клиентов, имеющих счета (или транзакции), и для пациентов, имеющих несколько диагнозов при посещении больницы.
В вашем случае это может выглядеть так:
Таблица: FactTransaction
PersonGroupKey
- Другие FactTableColumns
Таблица: BridgePersonGroup
PersonGroupKey
PersonKey
Таблица: DimPerson
PersonKey
- Столбцы других лиц
Для каждой группы людей вы должны создать новый PersonGroupKey и получить строки, подобные этой:
PersonGroupKey 1, PersonKey 5
PersonGroupKey 1, PersonKey 3
PersonGroupKey 2, PersonKey 1
PersonGroupKey 3, PersonKey 6
Затем PersonGroupKey представляет группу людей в Факте.
Логически говоря, должна быть еще одна таблица, DimPersonGroup, которая просто перечисляет PersonGroupKeys, но большинство баз данных не требуют этого, поэтому, как правило, моделисты Kimball отказываются от этого.
Это основа таблицы Bridge, но вы можете рассмотреть модификации в зависимости от вашей ситуации!
Я бы предложил использовать таблицу Bridge в сочетании с таблицами транзакций и персон. Пример:
Таблица:fact_transaction
transaction_id
(основной ключ)transaction_person_id
(иностранный ключ)- ...
Таблица:bridge_transaction_person
transaction_person_id
person_id
Таблица:dim_person
person_id
(основной ключ)- ...
Вам нужен присоединительный стол TransactionPerson
(или что-то подобное), где Person
в TransactionPerson
1:M отношения, а затем TransactionPerson
в Transaction
это отношения М:1.
Таким образом, вы можете иметь несколько человек, связанных с одной транзакцией косвенно.