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

у меня есть одна основная таблица фактов, которая содержит около 10 внешних ключей. теперь у меня есть другие 4 таблицы фактов, которые имеют отношение N: 1, связанное с основной таблицей фактов. вопрос в том, должен ли я копировать все внешние ключи в эти 4 таблицы фактов, или я должен выполнять соединение во время выполнения с основной таблицей фактов во время обработки куба SSAS?

какие плюсы и минусы?


person Kevin Yang    schedule 10.04.2012    source источник
comment
можешь привести пример. Было бы проще анализировать   -  person Diego    schedule 12.04.2012
comment
Конечно. основная таблица фактов - это FactTable (PKey, FKey1, FKey2, FKey3, FKey4, Value). Связанная таблица фактов, такая как FactTable1 (PKey, FactTable.PKey, ErrorCounter) FactTable2 (PKey, FactTable.PKey, EventCounter), вопрос в том, следует ли мне измените структуру FactTable1 или FactTable2 следующим образом: FactTable1(PKey, FactTable.PKey,FactTable.FKey1,FactTable.FKey2,FactTable.FKey3,FactTable.FKey4, ErrorCounter)   -  person Kevin Yang    schedule 13.04.2012
comment
Как у вас может быть 4 таблицы фактов, которые имеют отношения «многие к одному» с другим фактом? По определению, таблицы фактов связаны общими измерениями. Вы не помещаете ключ факта в другую таблицу фактов, за исключением очень очень ограниченных случаев.   -  person N West    schedule 17.04.2012
comment
На самом деле, когда вы пытаетесь реализовать сценарий «многие ко многим», это довольно распространено. Предположим, что основной таблицей фактов является FactConversation, и у вас может быть FactActivity (и соответствующая тусклая таблица DimActivity). В одном разговоре у вас может быть много действий. Теперь вы хотите знать количество разговоров по каждому действию или среднюю продолжительность разговора. Вам нужно будет реализовать многие ко многим между DimActivity и FactConversation   -  person Kevin Yang    schedule 18.04.2012


Ответы (3)


Кажется, я не могу добавить разрыв строки в комментарий. поэтому я оставляю комментарии здесь.
конечно. основная таблица фактов:
FactTable(PKey, FKey1,FKey2,FKey3,FKey4, Value)
Связанная таблица фактов, такая как
FactTable1(PKey, FactTable.PKey, ErrorCounter)
FactTable2(PKey, FactTable.PKey, счетчик событий)

вопрос в том, следует ли изменить структуру FactTable1 или FactTable2 следующим образом:
FactTable1(PKey, FactTable.PKey,FactTable.FKey1,FactTable.FKey2,FactTable.FKey3,FactTable.FKey4, ErrorCounter)

person Kevin Yang    schedule 13.04.2012

По какой причине вы хотели бы поместить все это в одну таблицу фактов? Как они соотносятся в SSAS как показатели/группы.

У вас есть проблемы с производительностью, как сейчас? Если для обработки куба, когда он находится в отдельных таблицах, требуется еще 5 секунд, а для загрузки всего этого в одну таблицу требуется 5 минут ETL, было бы разумнее оставить все как есть. Если наоборот, может быть, было бы неплохо поместить все это в одну таблицу фактов.

То, как вы моделируете свой куб в SSAS с отношениями между Dim и Fact, не обязательно должно быть таким же, как ваши таблицы связаны друг с другом в реляционной базе данных.

person cairnz    schedule 13.04.2012
comment
В моей модели куба все факты будут иметь регулярное отношение ко всем тусклым. поэтому в моей текущей схеме реляционной базы данных я создаю представление для каждой связанной таблицы фактов и присоединяюсь к основной таблице, чтобы получить эти внешние ключи. я связываю эти представления непосредственно в моем SSAS DSV. что меня волнует, так это производительность, как кубического процесса, так и ETL. Разумно ли помещать все эти ключи во все связанные таблицы во время ETL. Я сделал простой тест, который показывает не такую ​​большую разницу. - person Kevin Yang; 16.04.2012

Если вашей целью является производительность, а пространство не является проблемой, и вы будете создавать отчеты из дочерних таблиц фактов, не обращаясь к родительской таблице, тогда обязательно добавьте FK в другие таблицы FACT, ничего не потеряв и потенциально получив немного скорости.

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

person Joe    schedule 12.12.2013