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

Ответ

Нет, не может. Согласно реляционной модели, у таблицы может быть только один первичный ключ (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) на другие наборы столбцов, которые будут функционально похожи на первичные ключи, но не являются ими.

Ответ 18+ 🔞

А, ну тут классика, блядь! Слушай, я тебе сейчас как на духу, без всяких этих заумных соплей. Ну не может, и всё тут! По реляционной модели, у таблицы может быть только один, блядь, первичный ключ (PRIMARY KEY). Один, как яйцо у курицы, понимаешь? Не два, не три — один!

Но, а вот тут, сука, прикол! Этот один ключ может быть составным, то есть собран, как лего, из нескольких столбцов. Составной первичный ключ — это гарантия, что комбинация значений в этих колонках будет уникальной, как отпечатки пальцев у мартышлюшки.

Вот, смотри, как это выглядит в коде, не трогаю его, как велено:

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) на другие наборы столбцов. Они будут вести себя почти как ключи, но формально — не они. Как будто у тебя есть один главный паспорт, а остальные — это права, военник и пропуск в сортир. Вроде документы, но не паспорт, блядь! Вот и вся философия.