Детальное объяснение всех типов ключей в базах данных, с пояснением куда, зачем и как они применяются.

🔑 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Любой ключ из одного столбца

Источники

DatabaseTown.com

Types of Keys in Relational Model (Candidate, Super, Primary, Alternate and Foreign)