Детальное объяснение всех типов ключей в базах данных, с пояснением куда, зачем и как они применяются.
🔑 1. Primary Key (Первичный ключ)
✅ Что это:
Уникальный идентификатор записи в таблице. Он обязателен и уникален для каждой строки.
💡 Зачем нужен:
Чтобы различать строки в таблице, обеспечить уникальность и целостность данных.
🔧 Использование:
- Создаётся в каждой таблице (обычно одна на таблицу).
- Не допускает
NULL
и дубликатов.
📌 Пример:
CREATE TABLE Users (
user_id INT PRIMARY KEY,
name VARCHAR(100)
);
🔑 2. Foreign Key (Внешний ключ)
✅ Что это:
Ключ, который ссылается на первичный ключ другой таблицы.
💡 Зачем нужен:
Для установления связей между таблицами (реализация отношений в реляционной БД).
🔧 Использование:
- Обеспечивает ссылочную целостность.
- Можно настроить
ON DELETE
/ON UPDATE
поведение.
📌 Пример:
CREATE TABLE Orders (
order_id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES Users(user_id)
);
🔑 3. Unique Key (Уникальный ключ)
✅ Что это:
Гарантирует, что значения в одном или нескольких столбцах будут уникальными (как в PRIMARY KEY
), но может быть несколько на таблицу.
💡 Зачем нужен:
Чтобы предотвратить дублирование определённых данных (например, email или номер паспорта).
🔧 Использование:
- Допускает
NULL
(в большинстве СУБД), в отличие отPRIMARY KEY
.
📌 Пример:
CREATE TABLE Employees (
emp_id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE
);
🔑 4. Simple Key (Простой ключ)
✅ Что это:
Ключ (обычно PRIMARY
или CANDIDATE
), который состоит из одного столбца.
💡 Зачем нужен:
Чтобы идентифицировать строки, когда достаточно одного поля.
📌 Пример:
CREATE TABLE Products (
product_id INT PRIMARY KEY,
name VARCHAR(100)
);
🔑 5. Composite Key (Составной ключ)
✅ Что это:
Ключ, который состоит из нескольких столбцов (2 и более), вместе образующих уникальность строки.
💡 Зачем нужен:
Когда ни один из столбцов по отдельности не уникален, но вместе они однозначно определяют запись.
🔧 Использование:
- Может быть
PRIMARY
,UNIQUE
илиFOREIGN
.
📌 Пример:
CREATE TABLE Enrollments (
student_id INT,
course_id INT,
PRIMARY KEY (student_id, course_id)
);
🔑 6. Compound Key (Составной ключ)
🔔 Иногда это синоним
Composite Key
, но…
✅ Что это:
Состоит из нескольких полей, одно из которых может быть внешним ключом.
💡 Различие:
Composite Key
— просто несколько колонок.Compound Key
— этоComposite
, в котором хотя бы один элемент ссылается на другую таблицу (FOREIGN KEY
).
📌 Пример:
-- студент может записаться на курс только один раз
-- student_id — внешний ключ
-- (student_id, course_code) — составной ключ
🔑 7. Superkey (Суперкод)
✅ Что это:
Любой набор столбцов, который уникально определяет строку в таблице.
💡 Зачем нужен:
Это общая концепция, из которой выбираются Candidate keys
.
🔧 Особенности:
- Может содержать лишние поля.
- Может быть несколько Superkey в таблице.
📌 Пример:
Суперкод: (user_id, email), если user_id — уже уникален.
🔑 8. Candidate Key (Кандидатный ключ)
✅ Что это:
Минимальный Superkey
— то есть уникальный набор колонок, без лишних полей.
💡 Зачем нужен:
Служит кандидатом для Primary Key
.
🔧 Использование:
PRIMARY KEY
выбирается из набора Candidate Keys.- Остальные становятся
Alternate Keys
.
📌 Пример:
-- Если и user_id и email уникальны
-- То оба — Candidate Keys
🔑 9. Alternate Key (Альтернативный ключ)
✅ Что это:
Candidate Key
, который не был выбран в качестве PRIMARY KEY
.
💡 Зачем нужен:
Может быть использован для уникальной идентификации, как альтернатива.
🔧 Использование:
Часто реализуется через UNIQUE
ограничение.
📌 Пример:
CREATE TABLE Users (
user_id INT PRIMARY KEY,
email VARCHAR(100) UNIQUE -- Alternate Key
);
📊 Визуальная таблица различий
Ключ | Уникальный? | Может быть NULL? | Может быть несколько в таблице? | Назначение |
---|---|---|---|---|
Primary Key | ✅ Да | ❌ Нет | ❌ Нет | Уникальная идентификация строки |
Foreign Key | ❌ Нет | ✅ Да (обычно) | ✅ Да | Связь с другой таблицей |
Unique Key | ✅ Да | ✅ Да | ✅ Да | Уникальность без первичности |
Simple Key | ✅ Да | Зависит | ❌ Обычно нет | Простой Primary или Candidate из 1 поля |
Composite Key | ✅ Да | ❌ Нет (в целом) | ❌ Обычно один | Идентификация с помощью нескольких полей |
Compound Key | ✅ Да | ❌ Нет | ❌ Обычно один | Composite + Foreign Key внутри |
Superkey | ✅ Да | ❌ Обычно | ✅ Да | Любой уникальный набор, может быть избыточным |
Candidate Key | ✅ Да | ❌ Нет | ✅ Да | Минимальные Superkey |
Alternate Key | ✅ Да | ❌ Нет | ✅ Да | Кандидаты, не ставшие Primary Key |
📘 Резюме: где взять все типы ключей
Тип ключа | Где найти |
---|---|
Primary, Foreign, Unique | Через INFORMATION_SCHEMA , SQL Server sys.* |
Composite / Compound | Через анализ составных ограничений и внешних ключей |
Candidate / Alternate / Superkey | Только через анализ логики и нормализации таблиц |
Simple Key | Любой ключ из одного столбца |

Источники
Types of Keys in Relational Model (Candidate, Super, Primary, Alternate and Foreign)