Что такое согласованность (consistency) в контексте баз данных?

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

Ответ

Согласованность (consistency) — одно из ключевых свойств транзакций в БД (ACID), гарантирующее, что любая транзакция переводит базу данных из одного валидного состояния в другое валидное состояние. Это означает, что все правила целостности данных (ограничения, триггеры, каскадные операции) соблюдаются после завершения транзакции.

Пример на SQL (с использованием транзакции):

START TRANSACTION;

-- Списание суммы со счета отправителя
UPDATE accounts SET balance = balance - 100.00 WHERE user_id = 1;

-- Проверка бизнес-правила (нельзя уйти в минус)
-- Если баланс стал отрицательным, здесь можно вызвать ROLLBACK

-- Зачисление суммы на счет получателя
UPDATE accounts SET balance = balance + 100.00 WHERE user_id = 2;

-- Если все операции прошли успешно и правила соблюдены, фиксируем изменения.
COMMIT;

В контексте ACID:

  • Атомарность (Atomicity): Транзакция выполняется целиком или не выполняется вообще.
  • Согласованность (Consistency): Транзакция не нарушает целостность данных.
  • Изолированность (Isolation): Параллельные транзакции не мешают друг другу.
  • Долговечность (Durability): Результаты зафиксированной транзакции сохраняются навсегда.

Нарушение согласованности может привести к аномалиям, таким как "грязное чтение" (чтение незафиксированных данных) или нарушению внешних ключей. Использование транзакций и правильное определение уровней изоляции помогает поддерживать согласованность в многопользовательской среде.