Уникальный ключ (Unique Key) — это ограничение в реляционных базах данных, которое гарантирует, что все значения в указанном столбце (или комбинации столбцов) будут отличаться друг от друга. В отличие от первичного ключа, уникальный ключ позволяет иметь NULL-значения (но обычно только одно NULL-значение на столбец, в зависимости от СУБД).
Уникальность значений
Не допускает дублирования данных в указанных столбцах.
Допустимость NULL
Может содержать NULL-значения (в большинстве СУБД только один NULL разрешён).
Множественность
В таблице может быть несколько уникальных ключей.
Не кластеризуется
В отличие от первичного ключа, не создаёт кластеризованный индекс по умолчанию.
CREATE TABLE employees (
emp_id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE, -- Уникальный ключ на один столбец
passport_number VARCHAR(20),
CONSTRAINT uk_passport UNIQUE (passport_number) -- Именованный уникальный ключ
);
ALTER TABLE products
ADD CONSTRAINT uk_product_code UNIQUE (product_code);
CREATE TABLE classroom_bookings (
room_id INT,
booking_date DATE,
timeslot INT,
PRIMARY KEY (room_id, booking_date),
CONSTRAINT uk_booking UNIQUE (booking_date, timeslot) -- Нельзя забронировать один слот дважды
);
Защита от дублирования
Например, для email-адресов пользователей, номеров паспортов, артикулов товаров.
Альтернативные идентификаторы
Когда поле может быть PK, но уже есть другой первичный ключ.
Обеспечение бизнес-правил
Например, "один пользователь - один промокод".
Критерий | Уникальный ключ | Первичный ключ |
---|---|---|
NULL-значения | Разрешены (обычно один) | Запрещены |
Количество в таблице | Может быть несколько | Только один |
Индексирование | Не кластеризованный | Кластеризованный (обычно) |
Использование в FK | Возможно, но не принято | Основное назначение |
В разных СУБД поведение с NULL различается:
-- Пример для SQL Server (только один NULL)
CREATE TABLE test (
id INT IDENTITY,
code VARCHAR(10) UNIQUE -- Только одна строка может иметь NULL в этом поле
);
Резюмируем: уникальный ключ — это мощный инструмент обеспечения целостности данных, который предотвращает дублирование значений в столбцах, но при этом сохраняет гибкость за счёт допустимости NULL-значений. Он особенно полезен для реализации бизнес-правил и альтернативных идентификаторов помимо первичного ключа.