Оба типа ключей обеспечивают уникальность данных, но имеют важные различия:
Характеристика | PRIMARY KEY | UNIQUE KEY |
---|---|---|
Количество в таблице | Только один | Может быть несколько |
NULL значения | Запрещены | Разрешены (однако только один NULL в случае UNIQUE) |
Индексирование | Всегда создает кластерный индекс | Создает некластерный индекс |
Использование в связях | Основной для внешних ключей | Не используется для связей |
-- Создание таблицы с первичным ключом
CREATE TABLE employees (
id INT PRIMARY KEY, -- Первичный ключ
email VARCHAR(100) UNIQUE, -- Уникальный ключ
passport_number VARCHAR(20) UNIQUE
);
-- Альтернативный вариант объявления
CREATE TABLE departments (
dept_id INT,
dept_name VARCHAR(50),
CONSTRAINT pk_departments PRIMARY KEY (dept_id),
CONSTRAINT uk_departments_name UNIQUE (dept_name)
);
Первичный ключ:
Уникальный ключ:
Для первичного ключа:
Для уникального ключа:
CREATE TABLE bank_accounts (
account_id INT PRIMARY KEY, -- Основной идентификатор
account_number VARCHAR(20) UNIQUE NOT NULL, -- Уникальный номер счета
client_id INT NOT NULL,
iban VARCHAR(34) UNIQUE, -- Может быть NULL, но если есть - должен быть уникальным
FOREIGN KEY (client_id) REFERENCES clients(id)
);
Резюмируем: первичный ключ — это основной уникальный идентификатор строки, в то время как уникальный ключ обеспечивает дополнительные гарантии уникальности для других атрибутов таблицы. Выбор между ними зависит от бизнес-логики и требований к данным.