Вы задали общий вопрос о моделировании базы данных для хранилищ данных, который даст вам общие ответы, которые могут не относиться к платформе базы данных, с которой вы работаете - если вы хотите получить ответы, которые вы собираетесь использовать.возможность использования, я бы посоветовал быть более конкретным.
Теги вопроса указывают, что вы используете Amazon Redshift, и ответ для этой базы данных отличается от традиционных реляционных баз данных, таких как SQL Server и Oracle.
Во-первых, вам необходимо понять, чем Redshift отличается от обычных реляционных баз данных:
1) Это Massively Parallel Обработка (MPP) система, которая состоит из одного или нескольких узлов, которыеданные распределяются по всему, и каждый узел обычно выполняет часть работы, необходимую для ответа на каждый запрос.В связи с тем, что способ, которым данные распределяются по узлам, становится важным, цель обычно состоит в том, чтобы данные распределялись достаточно равномерно, чтобы каждый узел выполнял примерно одинаковое количество работы для каждого запроса.
2) Данныехранится в столбчатом формате .Это полностью отличается от строкового формата SQL Server или Oracle.В столбчатой базе данных данные хранятся таким образом, что делает запросы с большими типами агрегации намного более эффективными.Этот тип хранения частично сводит на нет причину использования таблиц измерений, поскольку хранение повторяющихся данных (атрибутов) в строках является относительно эффективным.
Таблицы красного смещения обычно распределяются по узлам с использованием значений one столбец (ключ распределения).В качестве альтернативы они могут быть распределены случайным образом, но равномерно, или Redshift может сделать полную копию данных на каждом узле (обычно это делается только с очень маленькими таблицами).
Поэтому при принятии решения о создании измерений необходимо подумать о том,это на самом деле принесет много пользы.Если в данных есть столбцы, которые регулярно обновляются, то лучше поместить их в другую таблицу меньшего размера, чем в одну большую таблицу.Однако, если данные в основном только для добавления (без изменений), тогда нет никакой пользы в создании измерений.Запросы, объединяющие и объединяющие данные, будут эффективными для одной таблицы.
СОЕДИНЕНИЯ могут стать очень дорогими в Redshift, если только обе таблицы не распределены по одному значению (например, идентификатору пользователя) - если они не Redshift, придется физически копировать данные вокруг узлов, чтобы иметь возможность запуститьзапрос.Таким образом, если у вас должны быть измерения, то вы захотите распределить таблицу наибольшего размера по тому же ключу, что и таблица фактов (помня, что каждая таблица может быть распределена только по одному столбцу), тогда может потребоваться распределение любых других измерений.как ВСЕ (копируется в каждый узел).
Мой совет - придерживаться одной таблицы, если у вас нет острой необходимости создавать измерения (например, если часто обновляются столбцы).