Существует мнение, что в
силу компактности суррогатных ключей,
связь, построенная на их основе, наиболее
эффективна. Но перед тем как обсуждать
этот вопрос, хотелось бы рассмотреть проблему
связи на основе суррогатных ключей более
обобщённо. В этой связи, очень показательно
высказывание К. Дейта о существенности
[CD AC]: «Теперь (наконец!) я поясню смысл
понятия существенности. Конструкция, связанная
с данными, существенна, если ее утрата
вызывает потерю информации - вполне точно,
я понимаю это так, что перестанет достигаться
некоторое отношение. Например, в реляционном
варианте базы данных отделов и сотрудников
все конструкции данных в этом смысле существенны.
Аналогично, в начальной сетевой версии
все конструкции (все строки, все столбцы
и все связи) тоже существенны. Но в пересмотренном
сетевом варианте строки и столбцы продолжают
быть существенными, а связь - нет. Нет
такой информации, которую можно было бы
получить из сети и нельзя было бы получить
только из строк и столбцов; вообще отсутствует
логическая потребность в связи.
Замечание: Некоторые
люди думают, что имеет место обратная
ситуация - существенна именно связь, а
не внешний ключ. Но это противоречит тому,
что поскольку некоторые строки и столбцы
должны быть существенными и ничего больше
не требуется, то зачем нам нужно что-то
еще?
Теперь (наконец) я могу
пояснить, в чем состоит принципиальное
различие между реляционной базой данных
и базой данных другого рода, скажем, сетевой.
В реляционной базе данных единственной
существенной конструкцией данных является
отношение. В других базах данных должна
присутствовать по меньшей мере одна дополнительная
существенная конструкция данных (такая,
как существенная связь). Если бы это было
не так, то база данных была бы по существу
реляционной с явной демонстрацией некоторых
путей доступа. (Не требуется, чтобы пользователи
явно применяли эти пути доступа; единственный
вопрос состоит в том, почему мы показываем
эти пути доступа, а другие не делают этого.)
И именно эти дополнительные существенные
конструкции данных в основном (но не полностью)
приводят к сложности нереляционных баз
данных».
Данная цитата весьма интересна,
если рассматривать её с точки зрения применения
суррогатных ключей, как альтернативной
связи между отношениями, вместо естественной
связи, построенной на интеллектуальных
ключах. Если предположить, что первичный
ключ делают суррогатным с целью упрощения
связи, и он по определению не несёт в
себе никакой полезной информации, то,
призывая к использованию суррогатных ключей
(«Не включайте информацию в первичный
ключ!»), Крис Дейт фактически призывает…
к отходу от реляционной модели. Как будет
показано далее, использование суррогатных
вместо интеллектуальных ключей действительно
усложняет базу данных и запросов.
|