Sobes.tech
Назад к вопросам
Junior — Middle
86

Можете привести пример ситуации, когда в базе данных применяется композитный первичный ключ?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

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, где каждая запись — это факт записи конкретного студента на конкретный курс.

  1. student_id и course_id объявлены как NOT NULL, потому что первичный ключ не может быть пустым.
  2. PRIMARY KEY (student_id, course_id) задаёт составной ключ из двух полей.
  3. База данных гарантирует, что одна и та же пара значений не встретится дважды.
  4. Такой подход удобен, когда сама комбинация полей и есть естественный идентификатор строки.

Ключевые моменты:

  • Композитный ключ используют, когда одного поля недостаточно для уникальности.
  • Это частая практика в таблицах-связках many-to-many.
  • Первичный ключ может состоять из нескольких колонок, и их сочетание должно быть уникальным.
  • Такой ключ помогает встроить бизнес-правило прямо в структуру БД.
  • В приложениях на Node.js это важно учитывать при запросах, обновлениях и удалениях по составному идентификатору.