2017-01-20 3 views
0

У меня есть таблица фактов с пятью таблицами измерений, связанных с ней. Типично, таблица фактов содержит суррогатные ключи каждого измерения и не имеет ключа бизнеса/суррогата. Я пытаюсь загрузить таблицу фактов с данными, полученными из таблицы фактов постановки. I.e. Ввести новые записи. Однако я замечаю, что таблица фактов также может обрабатывать другие операции, такие как обновление или удаление данных. Для этой цели в пакете SSIS был использован условный сплит, чтобы проверить, все ли суррогатные ключи равны 0, затем создайте новую вставку. Мой вопрос: могу ли я использовать суррогатные ключи с точки зрения обновления или удаления?Обновление и удаление записей в таблице фактов

Я сделал вставку на стол фактов, чтобы дать представление о том, как будут выглядеть данные.

enter image description here

+0

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

+0

Первичный ключ в таблице фактов не является необходимым и не может служить полезной целью. – Dodi

ответ

1

Ответ: Да, вы можете. НО, будет ли ситуация, когда один сотрудник продавал один и тот же продукт у одного и того же поставщика одному и тому же клиенту в тот же день? Возможно, другой порядок в тот же день? (основываясь на данных, которые вы указали в этом вопросе)

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

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

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

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

+0

Большое спасибо за ваш информативный ответ. Да, я позволяю процессу ETL обрабатывать такие, как обновление для каждого измерения. Это создало при постановке измерения в случае новой записи или обновления через команду OLDB. Затем я поставил таблицу фактов из каждого измерения, а затем загрузил каждое измерение как медленно меняющееся, которое затем может обновляться после изменения записей. – Dodi

+0

Похоже, вы продумали это, хорошо. Удачи!! –

+0

Я построил хранилище данных, но проблема его развертывания! Я попытался обратиться за помощью через этот сайт, задав вопрос о типе ошибки, но не повезло, что так когда-либо: _ ( – Dodi