Карта / SQL / Ограничения на поля

Ограничения на поля

Ограничения (constraints) — правила, которые база сама проверяет при каждой записи, не давая сохранить некорректные данные — последняя линия защиты, даже если приложение ошиблось.

CREATE TABLE users (
    id SERIAL PRIMARY KEY,             -- уникальный идентификатор
    email VARCHAR(255) UNIQUE NOT NULL, -- обязателен и уникален
    age INT CHECK (age >= 0),            -- проверка значения
    city_id INT REFERENCES cities(id)    -- внешний ключ — должен существовать в cities
);
Копнуть глубже

Основные виды ограничений:

ОграничениеЧто проверяет
PRIMARY KEYуникальный идентификатор строки, не NULL
UNIQUEзначение не повторяется в таблице
NOT NULLполе обязательно должно быть заполнено
CHECKпроизвольное условие (например, age >= 0)
FOREIGN KEY (REFERENCES)значение должно существовать в другой таблице

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

🎤 Закрыл тему, если можешь объяснить:
• основные виды ограничений (PRIMARY KEY, UNIQUE, NOT NULL, CHECK, FOREIGN KEY);
• почему ограничения нужны на уровне БД, а не только в коде приложения (если дошёл до 2-го слоя).