Сергей Супрунов
Первичные ключи имеют очень важное значение для работы с базой данных как
в плане поиска нужных записей, так и с точки зрения обеспечения ссылочной
целостности данных. Но при разработке приложений, взаимодействующих с БД, могут
возникать специфические проблемы.
При разработке структуры базы данных обычно используется один из двух
подходов к выбору первичного ключа: назначение в качестве такового одного или
нескольких столбцов таблицы, обеспечивающих возможность однозначно сослаться на
данную запись (будем называть это естественным ключом, иногда используется
термин «логический ключ»), либо ввод в структуру таблицы отдельного столбца,
единственное назначение которого – уникально идентифицировать запись
(«искусственный ключ», называемый также суррогатным).
Естественные и суррогатные
ключи
Использование естественных ключей для работы с таблицами – наиболее
прямолинейный и очевидный путь работы с базой данных. Например, в таблице
пользователей Интернета в качестве первичного ключа вполне может использоваться
имя учётной записи (login) абонента, в базе отдела кадров – табельный номер
сотрудника, в телефонном справочнике – номер телефона и т. п. В ряде случаев в
качестве первичного можно задать составной ключ, если необходимая уникальность
обеспечивается комбинацией нескольких полей.
Одним из недостатков этого подхода является то,
что задача ввода, а порой и формирования ключа возлагается на пользователя. А
следовательно, возможны ошибки – от банальных опечаток,
когда вместо телефона 23456 случайно вводится 23356, до генерации неуникальных
значений. Кроме того (и это является главной причиной, почему разработчики
избегают естественных ключей), значение любого столбца, которое что-то
означает, может измениться – абонент может поменять паспорт или потребовать
смены логина, модернизация городской АТС может сопровождаться сменой плана
нумерации телефонов, и т. п. Так что подобные ситуации приходится отслеживать,
БД либо приложение должны обеспечивать сохранение целостности (а также и
логичности) данных в случае модификации такого ключа, и так далее.