Первичный ключ

Материал из Энциклопедия о программировании
Перейти к: навигация, поиск

Первичный ключ (англ. Primary key, сокр. PK) или Ограничение первичного ключа (англ. Primary key constraint) в реляционной модели данных (РМД) — один из потенциальных ключей отношения, выбранный в качестве основного/главного ключа таблицы (или ключа по-умолч.).

Отличие от уникального ключа

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

Автоматический индекс

Для первичного ключа, так же как и для уникального, автоматически создаётся индекс, т.к. при каждой операции вставки или обновления данных СУБД нужно перебирать все имеющиеся в табл. ключи. Чтобы следить за соблюдением условия уникальности и для увеличения скорости этой проверки автоматически создаётся индекс. Так же для PK индекс нужен, т.к. именно по первичному ключу потенциально будет вестись поиск.

Назначение

Если в отношении имеется единственный потенциальный ключ, он явл. и первичным ключом. Если потенциальных ключей несколько, по опред. критериям один из них выбирается в качестве первичного, а др. называют «альтернативными», т.к. в 1 табл. может быть только 1 первичный ключ.

Критерии выбора

С точки зрения теории, все потенциальные ключи отношения эквивалентны, т.е. обладают одинаковыми свойствами уникальности и минимальности. Однако в качестве первичного обычно выбирается тот из потенциальных ключей, который наиболее удобен для тех или иных практических целей – напр., для создания внешних ключей в др. отношениях, либо для создания кластерного индекса. Поэтому в качестве первичного ключа, как правило, выбирают тот, который имеет наименьший размер (физического хранения) и/или включает наименьшее кол-во атрибутов.

Др. критерий выбора первичного ключа — сохранение уникальности со временем. Всегда существует вероятность того, что некоторый потенциальный ключ перестанет быть таковым в долговременной перспективе или при изменении требований к системе. Напр., если номер студенческой группы включает последнюю цифру года поступления, то номера групп для идентификации групп уникальны только в течение 10 лет. Поэтому в качестве первичного ключа стараются выбирать такой потенциальный ключ, который с наибольшей вероятностью не утратит уникальность.

Задачи

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

Ограничения

  • Никакие из записей табл. не могут иметь одинаковых значений первичного ключа.

Именование

Первичный ключ обычно сокращенно обозначают как PK (от primary key).

История

Исторически термин «первичный ключ» появился и стал использоваться существенно ранее термина «потенциальный ключ». Вследствие этого множество определений в реляционной теории были изначально сформулированы с упоминанием первичного (а не потенциального) ключа – напр., определения нормальных форм. Также термин «первичный ключ» вошёл в формулировку 12 правил Кодда как основной способ адресации любого знач. отношения (табл.) наряду с именем отношения (табл.) и именем атрибута (столбца).

Синтаксис

Этот раздел также можно назвать, или альтернативные заголовки раздела:
  • SQL синтаксис создания первичного ключа

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

Добавление ограничения первичного ключа при создании табл.

Поскольку ограничения явл. такими же свойствами табл., как и поля (столбцы), то ограничения принято писать отдельно, а не в описании столбца, т.к. ограничение это свойство табл., а не столбца.

CREATE TABLE `tbl_ttl` (
	`id` int(2) UNSIGNED NOT NULL AUTO_INCREMENT,
	`elm` varchar(255) NOT NULL,
	PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Добавление ограничения первичного ключа с помощью SQL команды CONSTRAINT:

CREATE TABLE `tbl_ttl` (
	`id` int(2) UNSIGNED NOT NULL AUTO_INCREMENT,
	`elm` varchar(255) NOT NULL,
	CONSTRAINT pkId PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Добавление ограничения первичного ключа при изменении табл.

ALTER TABLE `tbl_nm` ADD PRIMARY KEY (`id`);

Изменение табл., добавление ограничения первичного ключа с помощью SQL команды CONSTRAINT:

ALTER TABLE `tbl_nm` ADD CONSTRAINT PRIMARY KEY (`id`);