Целостность данных (Data Integrity) в SQL — это совокупность механизмов и правил, обеспечивающих корректность, согласованность и достоверность информации в базе данных. Поддержание целостности данных предотвращает появление дубликатов, несоответствий и нарушений логики данных.
Сущностная целостность (Entity Integrity)
Обеспечивает уникальность каждой строки в таблице с помощью первичных ключей.
Пример первичного ключа:
CREATE TABLE users (
id INT PRIMARY KEY,
name VARCHAR(100)
);
В этом случае каждый пользователь должен иметь уникальный id
.
Ссылочная целостность (Referential Integrity)
Гарантирует, что связи между таблицами остаются непротиворечивыми, используя внешние ключи.
Пример внешнего ключа:
CREATE TABLE orders (
id INT PRIMARY KEY,
user_id INT,
FOREIGN KEY (user_id) REFERENCES users(id)
);
Значение user_id
в orders
может ссылаться только на существующие id
в users
.
Доменная целостность (Domain Integrity)
Определяет допустимые значения для столбцов через ограничения CHECK
, NOT NULL
, UNIQUE
и типы данных.
Пример ограничения доменной целостности:
CREATE TABLE products (
id INT PRIMARY KEY,
price DECIMAL(10,2) CHECK (price > 0)
);
Значение price
всегда должно быть положительным.
Целостность на уровне бизнес-правил (Business Rules Integrity)
Реализуется с помощью триггеров, хранимых процедур и ограничений, которые контролируют выполнение бизнес-логики.
Пример триггера для проверки количества товара:
CREATE TRIGGER check_stock BEFORE INSERT ON orders
FOR EACH ROW
BEGIN
IF (NEW.quantity <= 0) THEN
SIGNAL SQLSTATE '45000' SET MESSAGE_TEXT = 'Количество товара должно быть положительным';
END IF;
END;
Механизмы обеспечения целостности данных
- Ограничения (
CONSTRAINTS
) —PRIMARY KEY
,FOREIGN KEY
,CHECK
,NOT NULL
,UNIQUE
. - Транзакции —
COMMIT
,ROLLBACK
,SAVEPOINT
. - Триггеры — автоматические проверки данных.
- Хранимые процедуры — контроль за бизнес-логикой.