1️⃣ Первичный ключ (Primary Key) — это уникальный идентификатор каждой записи в таблице.
- Не может содержать дубликатов
- Не может быть NULL
Пример:
В таблице Students поле student_id — первичный ключ, так как он однозначно идентифицирует каждого студента. Он уникален — нет двух студентов с одинаковым ID.

2️⃣ Внешний ключ (Foreign Key) — это поле, ссылающееся на первичный ключ другой таблицы.
- Указывает на первичный ключ другой таблицы
- Обеспечивает связь между таблицами
Пример:
Таблица Enrollments содержит поле student_id, которое ссылается на Students(student_id).

3️⃣ Уникальный ключ (Unique Key) — обеспечивает уникальность значений в столбце, но в отличие от первичного ключа, может быть NULL.
Пример:
В таблице Users поле email может быть уникальным — у двух пользователей не может быть одинаковых email.

4️⃣ Простой ключ (Simple Key) — ключ, состоящий только из одного поля.
Пример:
Паспорт гражданина — у каждого один уникальный номер. Поле passport_number в таблице Citizens — простой ключ.

5️⃣ Составной ключ (Composite Key) — ключ, который состоит из нескольких полей, вместе обеспечивающих уникальность записи.
Пример:
В таблице Course_Registrations составной ключ: (student_id, course_id). Если студент записался на курс, то вместе student_id + course_id создают уникальную запись.

6️⃣ Сложный ключ (Complex Key) — ключ, составленный из двух и более столбцов, вместе они уникальны.
Примечание: термины «составной» и «сложный» ключи часто используются как синонимы. В некоторых случаях под сложным ключом понимается ключ, включающий больше двух полей, но в базовой теории они равнозначны.
Пример:
Оценка зависит от студента, курса и даты экзамена — три поля вместе образуют сложный ключ.

7️⃣ Суперключ (Super Key) — любое множество столбцов, однозначно идентифицирующее запись.
- Может включать лишние поля (не обязательно минимальный состав).
Пример:
В таблице Employees: (employee_id, email) — суперключ, хотя employee_id достаточно.
У сотрудника есть username и email. И то, и другое — уникально. Вместе — суперключ.

8️⃣ Потенциальный ключ (Candidate Key) — это претенденты на роль первичного ключа. Уникальны и без лишних полей.
- В таблице может быть несколько потенциальных ключей.
Пример:
В таблице Members и username, и phone — уникальны. Один из них можно сделать первичным.

9️⃣ Альтернативный ключ (Alternate Key) — потенциальный ключ, который не выбран как первичный, но может использоваться для поиска и обеспечения уникальности.
Пример:
В Members id — первичный ключ, а username и phone — альтернативные ключи.

Таблица сравнения ключей:
Тип ключа | Уникальность | NULL допустим | Несколько полей | Связь с другими таблицами | Краткое объяснение |
---|---|---|---|---|---|
Первичный | ✔️ | ❌ | ✔️ | ❌ | Главный ID строки, уникальный, не пустой |
Внешний | ❌ | ✔️ | ✔️ | ✔️ | Связь с другой таблицей (ссылается на PK) |
Уникальный | ✔️ | ✔️ | ✔️ | ❌ | Значения не повторяются, могут быть NULL |
Простой | ✔️ | ❌/✔️ | ❌ | ❌ | Один столбец как ключ |
Составной/Сложный | ✔️ | ❌/✔️ | ✔️ | ❌ | Несколько полей, вместе — уникальный ключ |
Суперключ | ✔️ | ❌/✔️ | ✔️ | ❌ | Любой уникальный набор полей |
Потенциальный | ✔️ | ❌/✔️ | ✔️ | ❌ | Минимальный уникальный набор |
Альтернативный | ✔️ | ❌/✔️ | ✔️ | ❌ | Потенциальный ключ, который не стал PK |
Использованные источники:
- Microsoft Learn. Типы ограничений в SQL Server (SQL Server 2008 R2)
- Презентация: «AB_haldus (Irina Merkulova)» — слайды о ролях и задачах администратора баз данных.
- Сайт: Ключ (база данных)
- W3Schools: SQL Keys