Что такое первичный ключ (Primary Key) в реляционной базе данных?

Ответ

Первичный ключ (Primary Key, PK) — это ограничение, накладываемое на столбец или группу столбцов таблицы, которое гарантирует уникальность и однозначную идентификацию каждой строки (записи).

Основные свойства:

  1. Уникальность: В таблице не может быть двух строк с одинаковым значением первичного ключа.
  2. Отсутствие NULL: Значения в столбцах первичного ключа не могут быть NULL.
  3. Стабильность: Значение PK, как правило, не должно изменяться в течение жизни строки.
  4. Минимальность: PK должен состоять из минимального набора столбцов, необходимых для уникальной идентификации.

Типы первичных ключей:

  • Простые (Simple): Состоят из одного столбца (наиболее распространенный вариант).
  • Составные (Composite): Состоят из двух и более столбцов. Уникальность обеспечивается комбинацией их значений.

Примеры создания в SQL:

-- Простой первичный ключ при создании таблицы
CREATE TABLE Users (
    user_id INT PRIMARY KEY, -- Столбец user_id - PK
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE
);

-- Составной первичный ключ
CREATE TABLE OrderItems (
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT,
    PRIMARY KEY (order_id, product_id) -- PK из двух столбцов
);

-- Добавление первичного ключа к существующей таблице
ALTER TABLE Employees ADD CONSTRAINT pk_emp_id PRIMARY KEY (employee_id);

Практическое значение:

  • Связи между таблицами: На первичный ключ ссылается внешний ключ (Foreign Key) другой таблицы, что обеспечивает целостность данных.
  • Индексация: Для PK автоматически создается уникальный индекс (чаще всего кластеризованный), что значительно ускоряет поиск по ключу и операции JOIN.
  • ORM: В таких фреймворках, как Entity Framework (C#) или Hibernate (Java), PK часто используется для отслеживания состояния сущностей (Entity State).

Ответ 18+ 🔞

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

Представь себе паспорт. У каждого гражданина — свой уникальный номер. Не может быть двух людей с одинаковым паспортным номером, и номер не может быть пустым. Вот этот номер паспорта в мире таблиц и есть первичный ключ (Primary Key, PK). Он как отпечаток пальца для строчки в таблице.

Какие у него, блядь, приколы?

  1. Уникальность, ебать! Двух одинаковых значений быть не может. Второго такого же паспорта — ни хуя себе.
  2. NULL — не вариант. Не может быть человека с пустым паспортным номером. Или есть номер, или ты — призрак.
  3. Стабильность. Номер паспорта меняют редко и со скрипом. Так и тут — поменял ключ, и все связи, ёперный театр, посыпятся.
  4. Минимальность. Берут ровно столько данных, чтобы однозначно опознать запись. Не будут в ключ пихать твоё имя, рост и знак зодиака, если хватит одного ID.

А бывают они, между прочим, разные:

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

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

-- Вот самый простой случай, один столбец — и царь
CREATE TABLE Users (
    user_id INT PRIMARY KEY, -- Всё, user_id — наш главный паспорт
    username VARCHAR(50) NOT NULL,
    email VARCHAR(100) UNIQUE
);

-- А вот составной ключ, когда одного поля мало
CREATE TABLE OrderItems (
    order_id INT NOT NULL,
    product_id INT NOT NULL,
    quantity INT,
    PRIMARY KEY (order_id, product_id) -- Уникальна только парочка!
);

-- Иногда ключ забывают сразу сделать, потом добавляют
ALTER TABLE Employees ADD CONSTRAINT pk_emp_id PRIMARY KEY (employee_id);

А нахуя это всё нужно, спросишь?

  • Связи, блядь! На этот самый PK другие таблицы ссылаются через внешние ключи (Foreign Key). Без этого был бы полный распиздяй и бардак, данные бы друг с другом не связывались.
  • Скорость. Под PK база автоматом строит быстрый индекс. Поиск по нему — чих-пых, мгновенно.
  • Для всяких умных ORM-фреймворков (типа Entity Framework) этот ключ — святое. По нему система понимает, с какой именно сущностью она сейчас работает. Доверия к нему — ебать ноль, потому что он уникален и неизменен.

Короче, первичный ключ — это основа основ. Без него любая более-менее серьёзная таблица превращается в свалку, где манда с ушами.