Суррогатный ключ
Материал из Википедии — свободной энциклопедии
Суррога́тный ключ — понятие теории реляционных баз данных.
Это дополнительное служебное поле, добавленное к уже имеющимся информационным полям таблицы, единственное предназначение которого — служить первичным ключом. Значения этого поля не образуется на основе каких-либо других данных из БД, а генерируются искусственно.
Как правило, суррогатный ключ — это просто числовое поле, в которое заносятся значения из возрастающей числовой последовательности (как, например, у Sybase).
[править] Использование
Главное достоинство суррогатного ключа состоит в том, что он никогда не изменяется, поскольку не является информативным полем таблицы (не несёт никакой информации об описываемом записью объекте).
Работа с таблицей, содержащей суррогатный ключ, организуется так, чтобы при добавлении новой записи в поле суррогатного ключа было записано заведомо уникальное значение. Для этого используются либо специальные типы данных, либо триггеры и последовательности. После создания новой записи значение этого поля используется в качестве первичного ключа. Именно на него указывают все ссылки в связанных таблицах.
Использовать суррогатный первичный ключ имеет смысл, если естественный первичный ключ (составленный из информативных полей таблицы) — составной, и на него придется ссылаться во внешних ключах многих таблиц. В этом случае проще написать запрос:
select * from p, c where p.primary_key = c.foreign_key
чем
select * from p, c where p.id1 = c.fk1 and p.id2 = c.fk2 and p.id3 = c.fk3
Кроме того первый вариант работает быстрее.
Также использовать суррогатный ключ имеет смысл в случае, когда возможны изменения полей, составляющих (естественный) первичный ключ (в особенности если этот ключ — составной). В этом случае возникает проблема т. н. «каскадных изменений». При использовании же суррогатного ключа в качестве первичного, изменять его не придётся.
[править] См. также
СУБД | ||
Концепции (Эдгар Кодд, Кристофер Дейт, ...)
|
||
Реализации систем управления базами данных | ||
|