Первичный ключ — это один или несколько столбцов в таблице реляционной базы данных, которые уникально идентифицируют каждую запись.
Пример: номер паспорта, номер водительских прав или VIN автомобиля.
Каждая таблица обязательно должна иметь один первичный ключ, значения которого уникальны для каждой строки и не могут быть пустыми (NULL).
Основные задачи первичного ключа:
- Уникальная идентификация записи.
- Предотвращение дублирования записей.
- Упрощение поиска, изменения и удаления записей.
- Установление связей между таблицами.
- Поддержка целостности данных на уровне строк.
Характеристики хорошего первичного ключа:
Длина — короткий по возможности.
Тип данных — числовой или фиксированной длины символьный.
Уникальность — значения не повторяются.
Простота — простые целые числа или короткие строки.
Стабильность — значения не изменяются со временем.
Не допускает NULL — не может содержать пустых значений.
Актуальность — остаётся значимым и через годы.

Foreign Key
Foreign key (внешний ключ) — это столбец или несколько столбцов в таблице базы данных, которые ссылаются на столбец в другой таблице.
Зачем нужен foreign key:
Foreign key создаёт ограничение (foreign key constraint), которое гарантирует, что значение можно добавить или изменить только в том случае, если оно уже существует в связанной таблице.
Это позволяет задать связь «родитель — потомок», где внешние ключи в дочерней таблице ссылаются на первичный ключ в родительской.
Зачем это нужно:
- Поддержка целостности данных между таблицами.
- Запрет на добавление или изменение записей, нарушающих связь.
- Упрощение объединения данных из разных таблиц.
- Повышение надёжности работы базы.
Особенности:
- Foreign key необязателен, таблица может не иметь внешних ключей.
- Одна таблица может иметь сразу несколько внешних ключей.
Различие primary key и foreign key:
- Primary key уникален и обязателен для каждой строки в таблице.
- Foreign key ссылается на уникальное значение в другой таблице и может повторяться в своей таблице.
Пример

Unique key
Уникальные ключи — это столбцы в таблице реляционной базы данных, которые уникально идентифицируют значения в строках. Это звучит очень похоже на первичный ключ (primary key), но основное различие заключается в том, что уникальные ключи могут содержать значение NULL. Их задача — предотвратить наличие одинаковых значений в разных строках, но при этом в столбце с уникальным ключом значение может отсутствовать.
Пример
Если снова обратиться к примеру с удостоверением личности, то представьте группу людей на почте, у каждого из которых есть талончик с номером очереди. У кого-то может не быть такого талончика, но их паспорт (ID) всё равно будет являться первичным ключом. А номер талончика — это уникальный ключ, так как:
- ни у кого не может быть одинакового номера талона;
- но при этом у кого-то талона может и не быть (значение может быть NULL).
Простой ключ (Simple Key)
Любой из ранее описанных ключей может состоять из одного или нескольких полей. Например, если бы в качестве ключа использовались поля firstName
и lastName
, это был бы составной ключ из двух полей. А вот studentId
— это одно поле.
Простой ключ — это ключ, состоящий из одного поля, которое уникально идентифицирует запись. Кроме того, это поле нельзя разбить на другие поля. Например, studentId
— это одно целое значение, которое однозначно определяет конкретного студента. Не может быть двух студентов с одинаковым номером studentId
.
Конечно — вот перевод на русский:
Составной ключ (Composite Key) в SQL
Составной ключ — это первичный ключ, который состоит из двух или более столбцов, используемых вместе для уникальной идентификации записей в таблице. В отличие от первичного ключа из одного столбца, составной ключ объединяет значения нескольких столбцов, чтобы гарантировать уникальность. При этом каждое отдельное поле из состава такого ключа может не быть уникальным само по себе, но в комбинации с другими образует уникальное сочетание, позволяющее однозначно определить каждую строку в таблице.
Характеристики:
- Составной ключ создаётся из нескольких столбцов.
- Он обеспечивает уникальность при совместном рассмотрении значений этих столбцов.
- Ни один из столбцов, входящих в составной ключ, не может содержать значение NULL.
- Составной ключ полезен в тех таблицах, где ни одно отдельное поле не может гарантировать уникальность записи, но их комбинация может.

Super Key
Ключи в системах управления базами данных (DBMS) играют важную роль в поддержании целостности и уникальности данных. Среди них суперкласс (Super Key) — одна из базовых концепций, которая помогает в проектировании базы данных и поддержании её правильной структуры.
Super Key — это группа из одного или нескольких атрибутов (столбцов) таблицы, которая может уникально идентифицировать каждую строку в этой таблице. Он гарантирует, что ни у двух строк не будет одинакового набора значений в этих атрибутах.
Характеристики
- Уникальность:
Super Key обеспечивает уникальную идентификацию каждой строки в таблице и предотвращает дублирование записей. - Один или несколько атрибутов:
Он может состоять как из одного столбца, так и из комбинации нескольких столбцов. - Необязательно минимальный:
В отличие от Candidate Key, Super Key может включать дополнительные столбцы, которые не обязательны для обеспечения уникальности. - Включает в себя Primary Key и Candidate Key:
Каждый Primary Key и Candidate Key является Super Key, но не каждый Super Key является Primary или Candidate Key.

Candidate Key
Кандидатный ключ (Candidate Key) — это минимальный набор атрибутов, который уникально идентифицирует каждую запись (кортеж) в таблице. Иными словами, не должно быть двух строк в таблице, которые имели бы одинаковые значения в столбцах, входящих в состав кандидатного ключа. Candidate Key является подмножеством Super Key. Он играет важную роль в установлении связей между таблицами и поддержании целостности данных. Кандидатные ключи особенно важны в процессе нормализации базы данных, так как помогают устранять избыточность данных и аномалии.
Характеристики
- Уникальность:
Кандидатный ключ имеет уникальные значения для каждой строки в таблице. - Отношение к Super Key:
Каждый Candidate Key является Super Key, но не каждый Super Key является Candidate Key. Проще говоря, Candidate Key — это минимальный Super Key. - Допустимость null-значений:
Candidate Key может содержать null-значения, но это зависит от архитектуры и ограничений конкретной базы данных. - Отсутствие избыточных атрибутов:
Candidate Key не должен содержать лишних атрибутов — он должен быть максимально простым, чтобы всё ещё обеспечивать уникальность записи. - Определение остальных атрибутов:
Используя Candidate Key, можно уникально определить значения всех других атрибутов в таблице. - Primary Key выбирается из Candidate Keys:
Один из Candidate Keys выбирается как Primary Key таблицы. - Классификация атрибутов:
Candidate Key помогает разделить атрибуты таблицы на:- Prime Attributes (ключевые атрибуты): входят в состав хотя бы одного Candidate Key.
- Non-Prime Attributes (неключевые атрибуты): не входят ни в один Candidate Key.
- Обеспечение целостности данных:
Candidate Keys предотвращают дублирование строк в таблице. - Взаимосвязь между таблицами:
В многотабличных базах данных внешний ключ (Foreign Key) одной таблицы часто ссылается на Candidate Key (обычно Primary Key) другой таблицы для установления связей. - Быстрый доступ к строкам:
Доступ к строкам таблицы осуществляется быстрее при использовании Primary Key, который является одним из Candidate Keys.

Альтернативный ключ
Как следует из названия, альтернативный ключ (Alternate Key) — это ключ в таблице базы данных, который не выбран в качестве первичного ключа. Это дополнительный ключ, аналогичный первичному, с помощью которого можно получить доступ к данным в таблице. Альтернативный ключ также способен уникально идентифицировать каждую запись в таблице.
Характеристики
- Уникальность:
Альтернативный ключ должен быть уникальным — никакие две строки таблицы не могут иметь одинаковое значение этого ключа. Это важно, так как именно благодаря уникальности можно идентифицировать каждую запись по альтернативному ключу. По сути, альтернативный ключ обладает теми же свойствами, что и кандидатный или первичный. - Ограничение Not-Null:
Поскольку альтернативный ключ потенциально может стать первичным, его значения не могут быть null. Каждая строка в таблице должна содержать значение в столбце, который является альтернативным ключом. Null-значения могли бы нарушить целостность данных. - Кандидатный ключ:
Альтернативный ключ является кандидатным ключом, то есть потенциальным претендентом на роль первичного ключа. Если выбранный первичный ключ по каким-то причинам перестаёт подходить, альтернативный ключ обладает всеми необходимыми свойствами, чтобы занять его место. Однако по причинам проектирования или других решений он остаётся в качестве запасного варианта.

Источники
FK – https://www.cockroachlabs.com/blog/what-is-a-foreign-key/
Unique – https://www.gleek.io/blog/primary-vs-unique
Composite Key – https://www.geeksforgeeks.org/composite-key-in-sql/
Super Key – https://www.geeksforgeeks.org/super-key-in-dbms/
Candidate Key – https://www.geeksforgeeks.org/candidate-key-in-dbms/
Alternative Key – https://www.geeksforgeeks.org/alternate-key-in-dbms/