В настоящее время я участвую в разработке нового хранилища данных. Я новичок в этой теме, и у меня есть общий вопрос, касающийся схемы «звезда» и отношений «многие ко многим», в частности отношений «многие к 1/2».
Я хотел бы проиллюстрировать свою проблему коротким примером, например витрина данных о продажах. У меня есть таблица фактов, которая находится на уровне счета-фактуры и содержит такие показатели, как общий объем продаж в долларах США, НДС ... Для каждой из этих записей у меня есть по крайней мере один продавец и максимум два продавца. Оба продавца имеют одинаковые атрибуты, поэтому для продавцов требуется только одно простое измерение. Как бы вы это смоделировали?
Я могу представить себе следующие три разных подхода:
- Соединение через таблицу мостов - я предпочитаю эту, но я не уверен в этом из-за дополнительных усилий, которые таблица мостов вызывает из-за дополнительного соединения, особенно для больших размеров и особенно в таком случае, когда запись в факте Таблица связана только с одной или двумя записями в таблице измерения.
- Внесение двух внешних ключей продавца в таблицу фактов - я бы использовал этот подход только в том случае, если в целом между обоими продавцами есть существенная разница. Например. первый продавец всегда отвечает за линейку продуктов (продавец линейки продуктов), а второй всегда является менеджером по работе с ключевыми клиентами. С другой стороны, этот подход затрудняет выполнение запросов к хранилищу данных, например, когда мне нужны общие продажи всех продавцов, суммированные за текущий год, независимо от их роли.
- Одна запись в таблице фактов для каждого продавца - я создаю дубликат для записей, в которых есть два продавца. Благодаря такому подходу я могу избежать дополнительных соединений по сравнению с таблицей мостов, но моя таблица фактов будет больше. Кроме того, при создании запроса или отчета я должен учитывать и при необходимости устранять дубликаты. Таким образом, этот подход также затрудняет запрос данных.
Есть ли у вас какие-либо соображения по этому поводу? Было бы здорово, если бы вы могли поделиться некоторыми знаниями. Большое спасибо.