Может ли в таблице базы данных быть несколько первичных ключей (PRIMARY KEY)?

«Может ли в таблице базы данных быть несколько первичных ключей (PRIMARY KEY)?» — вопрос из категории Базы данных и SQL, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не может. Согласно реляционной модели, у таблицы может быть только один первичный ключ (PRIMARY KEY). Однако этот ключ может быть составным (composite key), то есть состоять из нескольких столбцов.

Составной первичный ключ гарантирует уникальность комбинации значений в этих столбцах.

Пример создания (SQL):

CREATE TABLE order_items (
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT,
    PRIMARY KEY (order_id, product_id) -- Один ключ из двух полей
);

Почему только один PRIMARY KEY?

  • Целостность: PRIMARY KEY — главный идентификатор строки для СУБД и логических связей (FOREIGN KEY).
  • Индексация: Создаётся уникальный кластерный индекс.

Альтернатива: Вы можете создать дополнительные уникальные ограничения (UNIQUE CONSTRAINT) на другие наборы столбцов, которые будут функционально похожи на первичные ключи, но не являются ими.