Открыть сервис

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

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

Основные свойства

Первичный ключ должен удовлетворять следующим обязательным свойствам:

В реляционных базах данных эти требования формализованы через определение ограничения PRIMARY KEY, которое автоматически создаёт уникальный индекс на указанных полях и накладывает ограничение NOT NULL.

Типы первичных ключей

По числу полей

По происхождению

История и появление термина

Понятие первичного ключа было введено Эдгаром Коддом в 1970 году в его фундаментальной работе «A Relational Model of Data for Large Shared Data Banks». Кодд определил, что для поддержания целостности данных каждая таблица (отношение) должна иметь так называемый «первичный ключ» (primary key), который служит единственным идентификатором кортежа. Идея вытекала из математической теории множеств: в отношении (таблице) не может быть двух одинаковых кортежей, а первичный ключ обеспечивает выполнение этого требования.

В ранних иерархических и сетевых СУБД такой механизм отсутствовал. Реляционная модель сделала первичный ключ частью стандарта, который затем был закреплён в спецификациях SQL (SQL-92, SQL:1999 и последующие).

Реализация в различных СУБД

Стандартный SQL

Синтаксис определения первичного ключа в языке SQL стандартизирован: ``sql CREATE TABLE Employees ( EmployeeID INT PRIMARY KEY, LastName VARCHAR(50) NOT NULL ); ` Или с явным именованием ограничения: `sql CREATE TABLE Employees ( EmployeeID INT, LastName VARCHAR(50) NOT NULL, CONSTRAINT PK_Employees PRIMARY KEY (EmployeeID) ); ``

Особенности популярных СУБД

Влияние на производительность

Первичный ключ напрямую влияет на скорость операций поиска, вставки и обновления данных. Поскольку СУБД автоматически создаёт уникальный индекс (обычно B-tree), поиск по значению первичного ключа является одним из самых быстрых видов доступа. Операции WHERE id = 123 выполняются за константное или логарифмическое время (O(log n) для B-tree). При вставке новой записи индекс приходится перестраивать, что может замедлить операции вставки на больших таблицах.

Выбор типа данных для первичного ключа также влияет на производительность. Целочисленные ключи обрабатываются быстрее строковых (особенно Unicode) и UUID. UUID версии 4 (случайные) вызывают высокую фрагментацию кластеризованных индексов, так как они не упорядочены.

Связь с другими ключами

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

В хорошо спроектированной базе данных все внешние ключи ссылаются на первичные ключи, а не на альтернативные. Это упрощает поддержку целостности.

Проблемы и ограничения

Интересные факты

Источники

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →