Первичный ключ и уникальный индекс: сходства, отличия и случаи применения Сходство заключается в том, что оба механизма гарантируют уникальность значений одного или нескольких столбцов Первичный ключ (PK) — это логический идентификатор строки и ограничение целостности данных Уникальный индекс (Unique index) — структурный объект СУБД, предназначенный для ускорения поиска и проверки уникальности Основные различия: PK может быть только один в таблице и автоматически создает кластерный индекс в реляционных БД, например в SQL Server Unique index может существовать в таблице в нескольких экземплярах и не обязательно является кластерным PK…
Чем отличаются первичный ключ и уникальный индекс и когда их применять?
Первичный ключ и уникальный индекс: сходства, отличия и случаи применения Сходство заключается в том, что оба механизма гарантируют уникальность значений одного или нескольких столбцов Первичный ключ (PK) — это…
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Первичный ключ и уникальный индекс: сходства, отличия и случаи применения
- Сходство заключается в том, что оба механизма гарантируют уникальность значений одного или нескольких столбцов
- Первичный ключ (PK) — это логический идентификатор строки и ограничение целостности данных
- Уникальный индекс (Unique index) — структурный объект СУБД, предназначенный для ускорения поиска и проверки уникальности
- Основные различия:
- PK может быть только один в таблице и автоматически создает кластерный индекс в реляционных БД, например в SQL Server
- Unique index может существовать в таблице в нескольких экземплярах и не обязательно является кластерным
- PK запрещает NULL, а unique index может разрешать такие значения — это зависит от конкретной СУБД
- Когда применять:
- PK выбирают для основного идентификатора сущности, которому необходимы уникальность и отсутствие NULL
- Unique index используют для дополнительных ограничений уникальности, например для email или номера телефона
- Для проектирования важно учитывать: PK связывает таблицы внешними ключами, а unique индекс реализует бизнес-правила уникальности
Вывод: PK предназначен для идентификации строки, а unique индекс — для дополнительных уникальных ограничений и ускорения запросов.
Подробный ответ
Основной ответ
Первичный ключ (Primary Key) представляет собой уникальный идентификатор строки таблицы: он гарантирует уникальность и не разрешает NULL-значения. Уникальный индекс (Unique Index) также контролирует уникальность значений одного или нескольких столбцов, однако может допускать NULL, если это предусмотрено используемой СУБД. Таким образом, оба механизма решают задачу уникальности, но отличаются назначением и правилами применения.
Ключевые моменты
- Первичный ключ является концептуальным ограничением, задающим "основной идентификатор" записи. Один столбец или набор столбцов первичного ключа обычно используется для формирования связей между таблицами через foreign key. Во многих СУБД для первичного ключа автоматически создается кластерный индекс — например, в SQL Server и InnoDB MySQL.
- Уникальный индекс — физический объект базы данных, обеспечивающий контроль уникальности. В одной таблице можно создать несколько уникальных индексов, тогда как первичный ключ допускается только один.
- По умолчанию первичный ключ не допускает NULL. Уникальный индекс может работать с NULL: в PostgreSQL уникальность проверяется по не-NULL значениям, а в Oracle NULL считается уникальным.
Когда что применять
- Первичный ключ задают, когда требуется основной идентификатор сущности. В таблице он может быть только один и должен однозначно определять каждую строку.
- Уникальные индексы создают для столбцов, которым необходима уникальность, но которые не выступают главным идентификатором записи. Примерами служат email пользователя и серийный номер продукта. В таблице можно задать несколько подобных ограничений.
Практический контекст
В прикладных проектах обычно задают первичный ключ в виде стабильного, чаще числового ID — auto-increment или UUID. Он обеспечивает быстрый поиск и используется для связей между таблицами. Для бизнес-правил и проверки уникальности применяют уникальные индексы. Например, в PostgreSQL 14+ первичный ключ часто создают на ID, а уникальные индексы — на email или username: это предотвращает дублирование и при необходимости позволяет хранить NULL.