Какие знаешь виды ограничений БД?
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Виды ограничений БД (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)
);
Ограничения БД — это фундаментальный инструмент для обеспечения качества, надёжности и согласованности данных в системе. Системный аналитик должен правильно определять и документировать все ограничения при проектировании структуры базы данных.