Первичный ключ (Primary Key, PK) — это фундаментальное понятие в реляционных базах данных, которое однозначно идентифицирует каждую запись в таблице. Это столбец (или комбинация столбцов), значение которого должно быть уникальным и не может содержать NULL.
Уникальность
Никакие две записи в таблице не могут иметь одинаковое значение первичного ключа.
Не NULL
Первичный ключ не может содержать пустые значения (NULL).
Неизменяемость (в идеале)
Хотя технически можно изменить PK, это считается плохой практикой, так как может нарушить ссылочную целостность.
CREATE TABLE employees (
emp_id INT PRIMARY KEY, -- Простой первичный ключ (одно поле)
name VARCHAR(100),
email VARCHAR(100) UNIQUE
);
CREATE TABLE orders (
order_id INT,
customer_id INT,
order_date DATE,
PRIMARY KEY (order_id, customer_id) -- Составной первичный ключ (два поля)
);
Характеристика | Первичный ключ (PK) | Уникальное ограничение (UNIQUE) |
---|---|---|
NULL значения | Запрещены | Разрешены (но только один NULL) |
Количество в таблице | Только один PK | Множество UNIQUE полей |
Использование в связях | Часто FK ссылаются на PK | Редко используются для FK |
Обеспечение целостности данных
PK гарантирует, что каждая запись может быть однозначно идентифицирована.
Создание связей между таблицами
Внешние ключи (Foreign Keys) других таблиц ссылаются на PK для установления отношений.
Производительность
Автоматически создаётся кластеризованный индекс (в большинстве СУБД), что ускоряет поиск.
Использование изменяемых данных (например, email как PK)
-- Плохая практика:
CREATE TABLE users (
email VARCHAR(100) PRIMARY KEY, -- email может измениться!
name VARCHAR(100)
);
Избыточные составные ключи
-- Избыточно:
CREATE TABLE order_items (
order_id INT,
product_id INT,
quantity INT,
PRIMARY KEY (order_id, product_id, quantity) -- quantity не нужен в PK!
);
Резюмируем: первичный ключ — это краеугольный камень структуры базы данных, обеспечивающий уникальность записей, целостность данных и эффективные связи между таблицами. Правильный выбор PK критически важен для проектирования надёжной и производительной БД.