Целостность данных (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. - Триггеры — автоматические проверки данных.
- Хранимые процедуры — контроль за бизнес-логикой.