Можете привести пример ситуации, когда в базе данных применяется композитный первичный ключ?
Ответ от нейросети
sobes.tech AI
Что хотят услышать интервьюеры:
Композитный первичный ключ используют, когда одну запись нельзя однозначно идентифицировать одним полем. Обычно это связь между сущностями, где уникальность задаётся комбинацией нескольких колонок. Такой ключ помогает естественно выразить бизнес-правило на уровне схемы БД.
Определение:
Композитный первичный ключ — это первичный ключ, состоящий из двух и более столбцов. В совокупности они должны быть уникальны и не могут содержать NULL. Его применяют, когда уникальность строки определяется не одним атрибутом, а сочетанием нескольких.
Пример использования:
Классический пример — таблица записей студента на курсы: один студент может записаться на один курс только один раз, поэтому уникальность задаётся парой student_id + course_id.
CREATE TABLE enrollments (
student_id INT NOT NULL,
course_id INT NOT NULL,
enrolled_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (student_id, course_id)
);
В этой таблице нельзя вставить две строки с одной и той же парой student_id и course_id, но один и тот же student_id или course_id отдельно может повторяться в разных строках.
Пояснение кода:
Код показывает таблицу enrollments, где каждая запись — это факт записи конкретного студента на конкретный курс.
student_idиcourse_idобъявлены какNOT NULL, потому что первичный ключ не может быть пустым.PRIMARY KEY (student_id, course_id)задаёт составной ключ из двух полей.- База данных гарантирует, что одна и та же пара значений не встретится дважды.
- Такой подход удобен, когда сама комбинация полей и есть естественный идентификатор строки.
Ключевые моменты:
- Композитный ключ используют, когда одного поля недостаточно для уникальности.
- Это частая практика в таблицах-связках many-to-many.
- Первичный ключ может состоять из нескольких колонок, и их сочетание должно быть уникальным.
- Такой ключ помогает встроить бизнес-правило прямо в структуру БД.
- В приложениях на Node.js это важно учитывать при запросах, обновлениях и удалениях по составному идентификатору.