2016-06-30 7 views
1

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

Однако стоп-кадры содержат главным образом внешние ключи к их оригинальным таблицам. Поэтому, чтобы получить полезную информацию о снимке, мы должны присоединиться к ним несколько раз к их соответствующим таблицам. И эти объединения часто занимают очень много времени. С другой стороны, добавление индексов ко всем столбцам FL в базах данных (или, по крайней мере, в столбцах в разделах WHERE в наших запросах) значительно замедляет работу базы данных.

Итак, мой вопрос: не лучше ли иметь таблицы снимков с реальными значениями вместо внешних ключей? И если ответ отрицательный, не будет ли он превзойти цель снимков, если исходные таблицы будут обновлены (например, если имя было вызвано «Свеча», а теперь «Лампа», конечно, моментальный снимок остается неизменным, но действительно ли это снимок в этом case?)

+1

Спросите себя: что произойдет, если некоторые записи будут удалены? Снимок, содержащий FK, больше не будет использоваться – lokusking

+0

@ lokusking. Разве не имело бы смысла иметь реальные ценности? – Disasterkid

+1

Это единственное, что имеет смысл imo. – lokusking

ответ

1

Я склоняюсь к сохранению фактических данных, а не значений FK по той причине, о которой вы упомянули. Тем не менее, лучшим решением могло бы быть перемещение этих исторических данных вместе с соответствующими атрибутами (IE Dimensions) и реструктуризация их для анализа. Data warehousing, безусловно, является решением для этого, хотя они могут быть очень крупномасштабными проектами, поэтому вам нужно будет понять его ценность и масштаб. Однако даже легкая звездная схема, предназначенная для конкретных событий, которые они пытаются захватить, может быть лучшим решением, чем большая историческая таблица с отношениями к таблицам на основе транзакций (особенно если логика запроса относительно связанных таблиц сложна) ,