0

Я читаю о моделировании DW и начал задаваться вопросом, почему суррогатные ключи используются вообще?Зачем нужны суррогатные ключи?

Я понимаю, что иногда бизнес-ключи не являются целыми числами, что делает жизнь (а также объединение и индексирование) сложнее. Однако, что я не понимаю, почему нужно решить любопытное ограничение DW или RDBMS путем добавления и дополнительного столбца для управления уникальными идентификаторами?

Не было бы более уместным, чтобы такая функциональность была прозрачной для пользователей DW/RDBMS, и запись автоматически получит внутренний идентификатор из системы? Например, создание дайджеста SHA-1 всей строки или ее подмножества (те поля, которые могут быть представлены в некотором виде текстового формата).

+0

Суррогатные ключи обычно представляют собой автоматически увеличивающиеся целые числа, длина которых составляет 32 бита. Так как вам нужно дублировать идентификатор строки в качестве внешнего ключа, где это применимо, это обычно экономит много места для дублирования длинных строк или нескольких столбцов. – apokryfos

+0

Понял. Я не понимаю, почему пользователям DW приходится беспокоиться об этом и почему это не интегрированная функциональность программного обеспечения DW или RDBMS? – aviad

+0

Я полагаю, что РСУБД не хочет налагать дополнительное пространство на суррогатные ключи в тех случаях, когда это необязательно. Что предлагает RDBMS - это механизм для разработчика БД для определения таких ключей, где это необходимо. – apokryfos

ответ

1

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

Вопросы вы можете столкнуться, не используя свой собственный суррогатный ключ:

  1. Большой или сложный естественный ключ в источнике - Как уже отмечалось выше, исходная система может быть с помощью естественный ключ, который не будет как и простое целое число
  2. Естественный ключ может быть повторно использован в источнике - Я столкнулся с проблемой, когда исходная система будет перерабатывать ключи, начиная с 1 раз, как только будет достигнуто максимальное значение, которое может удерживать целое число (для это имело смысл). Хранилище данных должно было признать, что повторяющиеся ключи были совершенно новыми.
  3. Слияния - Представьте, что две компании сливаются. Каждая компания имеет таблицу Employee с автоматически увеличивающимся целым числом, используемым в качестве ключа. У каждой компании будет сотрудник №1. Для хранилища DW необходим суррогатный ключ, чтобы отличить двух людей, которые имеют один и тот же идентификатор.
+0

Хорошие баллы! Тем не менее, все ваши точки кипят до того, что я упоминал (частично): не делайте предположений о ключах, используемых в исходной системе, и сохраняйте уникальные идентификаторы на уровне DB SW. Разве это не был бы правильный способ справиться с проблемой, а не изобретать колесо каждый раз во время греха? – aviad

+0

Да, не делайте никаких предположений о ключах в исходной системе и поддерживайте уникальные идентификаторы на уровне БД, скорее всего, используя автоматически увеличивающееся целое поле. Я не уверен, что вы подразумеваете под «изобретать колесо каждый раз». – Cory

+0

изобретать колесо = позволить пользователю БД реализовать уникальный идентификатор записи, а не стандартизировать его в программном обеспечении БД. – aviad