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)
);Связанные термины
Анекдоты по теме
MERGE (апдейт + инсерт) говорит таблице: — Я сейчас либо обновлю тебя, либо вставлю, смотря как повезёт. Таблица: — А если ты не попадаешь в условие? MERGE: — Тогда я просто упаду с ошибкой. Но ты же не захочешь меня откатывать? Это же долго.
DBA объясняет жене: — Дорогая, я как FOREIGN KEY. Я всегда ссылаюсь на тебя — мою PRIMARY KEY. Жена: — А если я удалюсь? DBA: — Тогда я не смогу существовать. Будет ошибка.
— Зачем нужен ORDER BY? — Чтобы база данных не выдавала результаты в случайном порядке. Потому что «случайный» в базе данных — это «как бог на душу положит».