← Назад к вопросам

Какие знаешь виды ограничений БД?

1.2 Junior🔥 181 комментариев
#Архитектура систем#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI28 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Виды ограничений БД (Constraints)

Ограничения (Constraints) — это правила, которые определяют, какие данные могут быть сохранены в базе данных. Они обеспечивают целостность данных, предотвращают ошибки и гарантируют, что информация в БД остаётся согласованной и достоверной. Ограничения работают на уровне БД и применяются автоматически при выполнении операций.

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

1. PRIMARY KEY (Первичный ключ)

Определяет уникальный идентификатор для каждой записи в таблице.

Характеристики:

  • Значение должно быть уникальным
  • Не может быть NULL
  • На каждую таблицу — только один PRIMARY KEY
  • Автоматически создаётся индекс для быстрого поиска

Пример:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    name VARCHAR(100)
);

2. UNIQUE (Уникальность)

Обеспечивает, что все значения в столбце (или группе столбцов) уникальны.

Особенности:

  • Может быть несколько UNIQUE ограничений на таблицу
  • Может содержать NULL значения (и несколько NULL)
  • Автоматически создаётся индекс

Пример:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    email VARCHAR(100) UNIQUE,
    phone VARCHAR(15) UNIQUE
);

3. FOREIGN KEY (Внешний ключ)

Обеспечивает ссылку между таблицами, гарантируя referential integrity (ссылочную целостность).

Характеристики:

  • Связывает столбец в одной таблице со столбцом в другой
  • Значение должно существовать в родительской таблице
  • Предотвращает удаление записей, на которые есть ссылки
  • Может быть несколько FOREIGN KEY на таблицу

Пример:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    user_id INT,
    FOREIGN KEY (user_id) REFERENCES users(user_id)
);

Опции FOREIGN KEY:

  • ON DELETE CASCADE — удалить связанные записи
  • ON DELETE SET NULL — установить NULL при удалении родителя
  • ON DELETE RESTRICT — запретить удаление (по умолчанию)
  • ON UPDATE CASCADE — обновить при изменении родителя

4. NOT NULL (Обязательное поле)

Обеспечивает, что столбец всегда содержит значение (не NULL).

Пример:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(100) NOT NULL
);

5. DEFAULT (Значение по умолчанию)

Устанавливает значение по умолчанию при вставке новой записи, если значение не указано.

Пример:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    status VARCHAR(20) DEFAULT pending,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

6. CHECK (Проверка условия)

Обеспечивает, что значение в столбце удовлетворяет определённому условию.

Пример:

CREATE TABLE users (
    user_id INT PRIMARY KEY,
    age INT CHECK (age >= 18),
    email VARCHAR(100),
    status VARCHAR(20) CHECK (status IN (active, inactive, banned))
);

7. INDEX (Индекс)

Создаёт структуру данных для быстрого поиска и сортировки.

Виды индексов:

  • Simple Index — индекс на один столбец
  • Composite Index — индекс на несколько столбцов
  • Unique Index — гарантирует уникальность значений
  • Full-text Index — для поиска по тексту

Пример:

CREATE INDEX idx_email ON users(email);
CREATE INDEX idx_user_created ON orders(user_id, created_at);

Матрица ограничений

ОграничениеУникальностьNULLКол-во на таблицуИндекс
PRIMARY KEYДаНет1Да
UNIQUEДаДа (несколько)МногоДа
FOREIGN KEYНетДаМногоНет
NOT NULLНетНетМногоНет
DEFAULTНетДаМногоНет
CHECKНетДаМногоНет

Целостность данных

Ограничения БД обеспечивают три типа целостности:

1. Целостность сущности (Entity Integrity)

  • PRIMARY KEY — каждая запись уникальна и идентифицируема
  • UNIQUE — нет дублей в критичных полях

2. Ссылочная целостность (Referential Integrity)

  • FOREIGN KEY — связь между таблицами согласована
  • Нельзя удалить запись, на которую есть ссылка (без CASCADE)

3. Целостность доменов (Domain Integrity)

  • NOT NULL — обязательность данных
  • DEFAULT — корректные значения по умолчанию
  • CHECK — данные соответствуют условиям
  • TYPE — тип данных проверяется при вставке

Практические примеры

Пример: таблица заказов с полными ограничениями

CREATE TABLE orders (
    order_id SERIAL PRIMARY KEY,
    user_id INT NOT NULL REFERENCES users(user_id) ON DELETE CASCADE,
    total DECIMAL(10, 2) NOT NULL CHECK (total > 0),
    status VARCHAR(20) DEFAULT pending CHECK (status IN (pending, confirmed, shipped, delivered)),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    UNIQUE KEY unique_user_orders (user_id, created_at)
);

Ограничения БД — это фундаментальный инструмент для обеспечения качества, надёжности и согласованности данных в системе. Системный аналитик должен правильно определять и документировать все ограничения при проектировании структуры базы данных.