Вопрос проверяет понимание ограничения UNIQUE в реляционных базах данных, которое гарантирует уникальность значений в столбце или группе столбцов, предотвращая дублирование данных.
Ограничение UNIQUE — это фундаментальный механизм обеспечения целостности данных в реляционных СУБД, таких как PostgreSQL, MySQL или SQL Server. Оно применяется к столбцу или группе столбцов таблицы, чтобы гарантировать, что все значения в этом наборе будут отличаться друг от друга. Это отличается от первичного ключа (PRIMARY KEY), который также подразумевает уникальность, но дополнительно запрещает NULL значения.
При попытке вставить или обновить строку, приводящую к нарушению уникальности, СУБД генерирует ошибку и откатывает операцию. Важный нюанс: в большинстве систем (согласно стандарту SQL) несколько NULL значений допускаются в столбце с UNIQUE, поскольку NULL трактуется как «неизвестное значение» и не считается равным другому NULL.
UNIQUE constraint часто используется для полей, которые должны быть уникальными, но не являются первичным ключом. Типичные примеры:
Создать ограничение можно при определении таблицы или добавить позже.
-- Создание таблицы с UNIQUE на столбце email
CREATE TABLE users (
id SERIAL PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) UNIQUE NOT NULL
);
-- Или для группы столбцов (композитный UNIQUE)
CREATE TABLE project_tasks (
project_id INT,
task_code VARCHAR(10),
description TEXT,
UNIQUE (project_id, task_code)
);
-- Попытка вставить дубликат вызовет ошибку:
-- INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
-- INSERT INTO users (username, email) VALUES ('bob', 'alice@example.com'); -- Ошибка!Вывод: Ограничение UNIQUE следует применять, когда необходимо гарантировать отсутствие дубликатов в данных, но при этом допускаются NULL значения. Это ключевой инструмент для поддержания корректности и непротиворечивости информации в базе данных.