Что означает свойство согласованности (Consistency) в ACID?

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

Ответ

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

Корректность определяется набором предопределённых правил целостности:

  • Ограничения (Constraints): PRIMARY KEY, FOREIGN KEY, UNIQUE, NOT NULL, CHECK.
  • Триггеры (Triggers).
  • Бизнес-правила, реализованные в коде приложения.

Принцип работы: Если выполнение транзакции нарушает любое из этих правил, вся транзакция откатывается (rollback), и база данных возвращается в состояние, которое было до её начала. Если правила не нарушены, транзакция фиксируется (commit).

Пример на SQL:

-- База данных с ограничением: баланс счёта >= 0
CREATE TABLE accounts (
    id INT PRIMARY KEY,
    balance DECIMAL(10,2) CHECK (balance >= 0)
);

-- Транзакция перевода денег
BEGIN TRANSACTION;
    UPDATE accounts SET balance = balance - 100 WHERE id = 1; -- Списание
    UPDATE accounts SET balance = balance + 100 WHERE id = 2; -- Зачисление
COMMIT;
  • Согласованна: Если у счёта id=1 было >=100, после COMMIT оба счёта имеют неотрицательный баланс, все ограничения соблюдены.
  • Нарушена: Если у счёта id=1 было 50, первое UPDATE нарушит CHECK-ограничение. СУБД автоматически выполнит ROLLBACK, и балансы останутся неизменными (50 и N).

Важно: Согласованность в ACID — это целостность данных на уровне БД. Она не гарантирует логическую корректность бизнес-операции (это ответственность приложения), но обеспечивает, что данные всегда будут соответствовать формальным правилам, заданным в схеме.