Правильный способ моделирования нескольких схем FACT - PullRequest
0 голосов
/ 13 июля 2020

Фон

Я занимаюсь проектированием базы данных (с использованием схемы STAR).

Есть три таблицы для моделирования: продукты , тесты , состояния .

База данных будет использоваться для хранения результатов тестов , проведенных на продуктах (в большом упрощении). Может быть много тестов , указывающих на один продукт, но каждый тест уникален (они не разделяются между продуктами ). Кроме того, мне нужно записать текущее состояние продукта на момент проведения теста . Предположим, что состояние товара описывает его текущее местоположение и владельца, которые меняются очень часто. Скорее всего, это будет связано с SCD lvl 2 - для отслеживания истории изменений состояния и возможности найти продукт со всеми его тестами , а также состояния , которые были у него во время этих тестов .

Проблема

Я не совсем уверен, как смоделировать эту проблему. Кажется очевидным хранить каждый тест в таблице FACT. Тогда эта таблица будет состоять из тысяч транзакций. С другой стороны, также будут сотни (а позже тысячи) продуктов , поэтому мне, вероятно, следует сохранить их во второй таблице FACT. Затем будут также тысячи изменений состояния , поэтому для записи всей их истории мне также нужно будет сохранить их в ... таблице FACT? Мне сказали, что таблицы FACT обычно используются для хранения многострочных данных, но, с другой стороны, где DIM в этой модели?

Я также не знаю, как смоделировать отношения между этими таблицами . Продукты - состояния - это отношение 1: *. Продукты - тесты также равно 1: *. Наконец, указывает - tests тоже 1: *. Я бы тогда go со связью продуктов с состояниями , а затем состояниями с тестами ( продукты 1 < - * состояния 1 <- * <em>тесты ), что позволило бы мне найти все состояния для конкретного продукта и всех тесты (во всех состояниях или в выбранном состоянии ). Что ты об этом думаешь? Проблема здесь в том, что, поскольку я продолжаю добавлять состояния , у меня есть два варианта: либо продолжать дублировать продукты в таблице продукты (с добавлением столбца «record_timestamp» ) или используйте SCD lvl 2 в таблице состояний , указывая на таблицу products с помощью FK, но это фактически сделало бы таблицу product DIM!

Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 01 августа 2020

Таблицы фактов содержат показатели, которые вы sh должны сообщать, т.е. числа, которые вы можете подсчитать, суммировать, усреднить и т. Д. c. Они также содержат внешние ключи к измерениям, которые содержат атрибуты, с помощью которых вы sh нарезаете меры. Вам необходимо решить, какие меры вы хотите отслеживать, и их степень детализации - если все меры имеют одинаковую степень детализации, тогда может быть возможно иметь одну таблицу фактов, в противном случае вам может потребоваться несколько таблиц фактов.

Для измерений это звучит так, как будто у вас будут продукты (вероятно, SCD2, поскольку вам нужно отслеживать состояние продукта с течением времени), тесты (при условии, что тесты имеют атрибуты) и любые другие параметры, которые вам нужны, такие как дата или время

...