Использование других методов для генерации первичных ключей

We use cookies. Read the Privacy and Cookie Policy

Использование других методов для генерации первичных ключей

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

• Первый вариант — генерация случайного значения в поле первичного ключа для каждой создаваемой записи. Этот способ используется таблицами, содержащими поля AutoNumber, которые преобразованы при переносе данных из Microsoft Access в SQL Server. Он также используется при репликации баз данных Access для устранения коллизий между записями, которые вводятся неподключенными пользователями.

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

• Третий вариант — создание первичного ключа на основе данных. Например, пер вичный ключ для записи клиента Vito Polito может иметь вид VP001. Для другого клиента с аналогичными инициалами ключ будет иметь вид VP002 и т.д. К преимуществам можно отнести ассоциацию ключа с данными, а к недостаткам – необходимость создания дополнительного кода в виде хранимых процедур.