Потенциальный ключ

Материал из Википедии — свободной энциклопедии
(перенаправлено с «Возможный ключ»)
Перейти к навигации Перейти к поиску

Потенциальный ключ (англ. candidate key, также в русскоязычных источниках используется термин возможный ключ[1]) — в реляционной модели данных — подмножество атрибутов отношения, удовлетворяющее требованиям уникальности и несократимости (минимальности)[1][2][3]:

  • Уникальность означает, что нет и не может быть двух кортежей данного отношения, в которых значения этого подмножества атрибутов совпадают (равны).
    Свойство уникальности определяется не для конкретного значения переменной отношения в тот или иной момент времени, а по всем возможным значениям, то есть следует из внешнего знания о природе и закономерностях данных, которые могут находиться в переменной отношения.
  • Минимальность (несократимость) означает, что в составе потенциального ключа отсутствует меньшее подмножество атрибутов, удовлетворяющее условию уникальности. Иными словами, если из потенциального ключа убрать любой атрибут, он утратит свойство уникальности.

Кристофер Дейт отмечает, что, хотя свойство несократимости в литературе часто обозначается термином минимальность, последний термин является не вполне подходящим, поскольку может навести кого-либо на мысль о том, что из нескольких потенциальных ключей минимальным является ключ с наименьшим количеством атрибутов. Поэтому Дейт предпочитает термин несократимость[2].

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

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

Поскольку все кортежи в отношении по определению уникальны, в нём всегда существует хотя бы один потенциальный ключ (например, включающий все атрибуты отношения)[2].

Первичные и альтернативные ключи[править | править код]

В отношении может быть одновременно несколько потенциальных ключей. Один из них может быть выбран в качестве первичного ключа отношения, тогда другие потенциальные ключи называют альтернативными ключами'[2].

Теоретически, все потенциальные ключи равно пригодны в качестве первичного ключа, на практике в качестве первичного обычно выбирается тот из потенциальных ключей, который имеет меньший размер (физического хранения) и/или включает меньшее количество атрибутов. Как указывал Э. Кодд, «обычно основанием [для выбора первичного ключа] является упрощение работы, но этот аспект выходит за рамки реляционной модели»[4].

В языке SQL альтернативный ключ задаётся как ограничение уникальности (UNIQUE CONSTRAINT), и существует разница между первичным и альтернативными ключами. В первичный ключ не могут быть включены «необязательные» столбцы, то есть столбцы без ограничения NOT NULL. Однако ограничение уникальности может быть задано для столбцов, которые допускают значения NULL, и в этом случае строки, содержащие NULL в таких столбцах, могут фактически не быть уникальными. В разных реализациях допускается или запрещается наличие нескольких строк с идентичными комбинациями пустых и непустых значений в альтернативном ключе[5][6].

Примечания[править | править код]

  1. 1 2 3 Кузнецов С.Д., 2007.
  2. 1 2 3 4 Дейт К. Дж., 2005.
  3. Коллектив авторов. DAMA-DMBOK. Свод знаний по управлению данными.. — Litres, 2020-11-17. — 830 с. — ISBN 978-5-04-312658-0.
  4. Codd E.F. Domains, Keys, and Referential Integrity in Relational Databases // InfoDB3. — 1988. — 3, №1.
  5. Constraints - SQL Database Reference Material - Learn sql, read an sql manual, follow an sql tutorial, or learn how to structure an SQL query! www.sql.org. Дата обращения: 16 августа 2018. Архивировано 28 июля 2021 года.
  6. Comparison of different SQL implementations. troels.arvin.dk. Дата обращения: 16 августа 2018. Архивировано 9 марта 2005 года.

Литература[править | править код]