Что такое ограничения (constraints) в реляционных базах данных?

«Что такое ограничения (constraints) в реляционных базах данных?» — вопрос из категории Базы данных, который задают на 10% собеседований IOS Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Ограничения (Constraints) — это правила, накладываемые на данные в таблицах реляционной БД для обеспечения целостности данных (data integrity). Они автоматически проверяются СУБД при операциях вставки, обновления или удаления.

Основные типы ограничений в SQL:

Ограничение Назначение Пример SQL (CREATE TABLE)
PRIMARY KEY Уникально идентифицирует каждую строку. Не допускает NULL и дубликаты. id INT PRIMARY KEY
FOREIGN KEY Обеспечивает ссылочную целостность. Связывает поле с PRIMARY KEY другой таблицы. FOREIGN KEY (user_id) REFERENCES Users(id)
NOT NULL Запрещает полю содержать значение NULL. name VARCHAR(100) NOT NULL
UNIQUE Гарантирует, что все значения в столбце различны (допускается один NULL). email VARCHAR(255) UNIQUE
CHECK Проверяет значение по заданному логическому условию. age INT CHECK (age >= 18)
DEFAULT Устанавливает значение по умолчанию для столбца, если оно не указано при вставке. created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP

Практический пример с несколькими ограничениями:

CREATE TABLE Employees (
    emp_id INT PRIMARY KEY,                     -- Уникальный идентификатор
    name VARCHAR(100) NOT NULL,                 -- Имя обязательно
    email VARCHAR(255) UNIQUE NOT NULL,         -- Уникальный и обязательный email
    department_id INT,                          -- Может быть NULL, если сотрудник без отдела
    salary DECIMAL(10,2) CHECK (salary > 0),   -- Зарплата должна быть положительной
    hire_date DATE DEFAULT (CURRENT_DATE),      -- Дата приема по умолчанию — сегодня
    FOREIGN KEY (department_id) REFERENCES Departments(id) -- Связь с таблицей отделов
);

Итог: Ограничения переносят логику проверки данных с уровня приложения на уровень БД, что делает данные более надежными и согласованными.