Первичный ключ — в реляционной модели данных один из потенциальных ключей отношения, выбранный в качестве основного ключа (или ключа по умолчанию).
Если в отношении имеется единственный потенциальный ключ, он является и первичным ключом. Если потенциальных ключей несколько, один из них выбирается в качестве первичного, а другие называют «альтернативными».
С точки зрения теории все потенциальные ключи отношения эквивалентны, то есть обладают одинаковыми свойствами уникальности и минимальности. Однако в качестве первичного обычно выбирается тот из потенциальных ключей, который наиболее удобен для тех или иных практических целей, например для создания внешних ключей в других отношениях либо для создания кластерного индекса. Поэтому в качестве первичного ключа как правило выбирают тот, который имеет наименьший размер (физического хранения) и/или включает наименьшее количество атрибутов.
Первичным ключом могут быть поля отвечающие следующим требованиям:
-две разные строки не могут иметь одно и то же значение первичного ключа;
|
|
-каждая строка должна иметь определенное значение первичного ключа (не NULL).
Некоторые СУБД не допускают изменения значения в столбце первичного ключа.
Внешний ключ – это столбец, значения которого должны совпадать с первичным ключом некоторой таблицы. Иными словами, для внешнего ключа доменом является множество значений первичного ключа. Внешний ключ не может принимать значения, не содержащиеся в первичном ключе. Единственно возможное исключение – значение Null (пусто), при котором внешний ключ ни на что не ссылается. Поддержание целостности ключей является задачей СУБД.
Допустимой является ситуация, когда содержащийся в таблице внешний ключ ссылается на первичный ключ той же самой таблицы. Пример: запись с информацией о сотруднике, размещенная в таблице «Сотрудник», имеет атрибут «Начальник», ссылающийся на другую запись в той же самой таблице.
Внешний ключ может быть (или не быть) частью составного первичного ключа в своей таблице.