DDL / СхемаНачальный
PRIMARY KEY
Уникальный идентификатор строки. Автоматически создаёт уникальный индекс, не допускает NULL.
Синтаксис
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY
-- или
PRIMARY KEY (col1, col2) -- составнойОбъяснение
PRIMARY KEY = UNIQUE + NOT NULL + автоматический индекс. На таблицу — только один.
Рекомендации для PostgreSQL:
- BIGINT GENERATED ALWAYS AS IDENTITY — современный стандарт
- UUID — если нужна глобальная уникальность, но медленнее из-за случайности (UUID v7 лучше)
- Суррогатный ключ (id) лучше натурального (email) — email может измениться
Пример
-- Современный вариант
CREATE TABLE products (
id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
name TEXT NOT NULL
);
-- Составной ПК
CREATE TABLE order_items (
order_id BIGINT REFERENCES orders(id),
product_id BIGINT REFERENCES products(id),
PRIMARY KEY (order_id, product_id)
);Связанные термины
Анекдоты по теме
— Что такое вторая нормальная форма? — Нет частичной зависимости от составного ключа. — Пример нарушения? — Таблица orders(order_id, product_id, product_name). product_name зависит только от product_id, не от всего ключа. — Как исправить? — Вынести product_name в таблицу products.
— Что такое PRIMARY KEY простыми словами? — Это как паспорт. У каждого человека свой номер. Нельзя иметь два паспорта с одним номером и нельзя жить без паспорта.
Начинающий: — А что будет, если написать UPDATE users SET зарплата = зарплата * 2? Опытный: — Все станут богатыми. Начинающий: — А если без WHERE? Опытный: — Я сказал — все.