Как ответить
Primary Key (первичный ключ) — это столбец или набор столбцов в таблице, который уникально идентифицирует каждую строку. У него два обязательных свойства: уникальность (две строки не могут иметь одинаковое значение PK) и NOT NULL (значение PK не может быть пустым). В большинстве СУБД при объявлении PK автоматически создаётся уникальный индекс, что ускоряет поиск по этому столбцу.
На практике Primary Key чаще всего делают суррогатным — отдельным столбцом без бизнес-смысла, например, автоинкремент (SERIAL, AUTO_INCREMENT) или UUID. Это проще и стабильнее, чем естественные ключи (например, номер паспорта или email), потому что бизнес-данные могут меняться или дублироваться.
Пример создания таблицы с Primary Key:
CREATE TABLE users (
id SERIAL PRIMARY KEY,
email VARCHAR(255) UNIQUE NOT NULL,
name VARCHAR(100) NOT NULL
);Здесь id — суррогатный первичный ключ. Даже если email уникален, он не подходит на роль PK, потому что может измениться (пользователь сменит почту).
Составной Primary Key (composite key) используется, когда уникальность строки определяется комбинацией столбцов. Например, в таблице заказов с деталями:
CREATE TABLE order_items (
order_id INT NOT NULL,
product_id INT NOT NULL,
quantity INT NOT NULL,
PRIMARY KEY (order_id, product_id)
);Здесь пара (order_id, product_id) уникальна — один товар в одном заказе встречается только один раз.
Важно помнить ограничения: Primary Key может быть только один на таблицу. Если нужно несколько уникальных столбцов — используют UNIQUE constraints. Также PK не должен быть слишком «широким» (много столбцов или длинные строки), потому что он участвует во внешних ключах и индексах — это замедляет операции вставки и join-ы.
Типичная ошибка новичков — использовать NULL-допустимый столбец как PK. Это сломает уникальность: NULL != NULL, и СУБД не сможет гарантировать идентификацию строки.