Что такое Primary Key и Composite Key в базе данных SQL? Примеры использования.
В реляционных базах данных ключи играют ключевую роль в обеспечении целостности данных и связей между таблицами. Два важнейших типа ключей — это Primary Key (первичный ключ) и Composite Key (составной ключ).
## Primary Key (Первичный ключ)
Первичный ключ — это столбец или набор столбцов, который однозначно идентифицирует каждую строку в таблице. Он должен соответствовать трём правилам:
— Уникальность: значения не повторяются.
— Не NULL: поле не может быть пустым.
— Неизменяемость: значение не должно меняться со временем.
Пример создания таблицы с первичным ключом:
sql
CREATE TABLE users (
user_id INT PRIMARY KEY,
username VARCHAR(100) NOT NULL,
email VARCHAR(255) NOT NULL
);
Здесь `user_id` — первичный ключ. Каждый пользователь имеет уникальный идентификатор.
## Composite Key (Составной ключ)
Составной ключ — это первичный ключ, состоящий из двух и более столбцов. Используется, когда ни один отдельный столбец не может однозначно идентифицировать строку, но их комбинация — может.
Пример: таблица записей студентов на курсы, где один студент может записаться на несколько курсов, и один курс может иметь несколько студентов:
sql
CREATE TABLE enrollments (
student_id INT,
course_id INT,
enrollment_date DATE,
PRIMARY KEY (student_id, course_id)
);
Здесь ни `student_id`, ни `course_id` по отдельности не уникальны, но их комбинация гарантирует уникальность записи.
## Разница между Primary Key и Composite Key
| Характеристика | Primary Key | Composite Key |
|—|—|—|
| Количество столбцов | Один | Два и более |
| Уникальность | Да | Да (по комбинации) |
| NULL | Запрещён | Запрещён |
| Применение | Простые сущности | Связующие таблицы, M:N отношения |
## Когда использовать составной ключ?
Составной ключ особенно полезен в таблицах-связках (junction tables), которые реализуют отношения многие-ко-многим. Например:
— Заказы и товары (один заказ — много товаров).
— Пользователи и роли (один пользователь — несколько ролей).
— Расписание (день + время + аудитория).
Важно: при использовании составного ключа индекс создаётся по всем входящим столбцам, что влияет на производительность запросов. Порядок столбцов в составном ключе имеет значение для оптимизации.
Таким образом, Primary Key обеспечивает уникальность одной колонки, а Composite Key — уникальность комбинации нескольких колонок, что делает их незаменимыми инструментами при проектировании реляционных баз данных.
