Skip to main content
Practice Problems

ACID - consistency

markdown
## ACID - Consistency ### Вступ Якщо заглибитись в технічну реалізацію Consistency, то найбільш ефективний спосіб це зробити - перенести максимум правил на рівень бази даних, а не тримати їх на рівні бізнес логіки. ### Перенесення валідації на рівень бази даних Наприклад, замість того щоб валідувати дані на рівні сервісів, ми можемо перенести валідацію в Constraints або Triggers. ```sql DROP TABLE IF EXISTS accounts; CREATE TABLE accounts (   id bigserial PRIMARY KEY,   owner text NOT NULL,   balance numeric(12,2) NOT NULL,      -- Замість того, щоб тримати валідацію в сервісах ми робимо це на рівні бази даних   -- Таким чином, ми узгоджуємо те, що balance не може бути меншим, ніж 0   CONSTRAINT accounts_balance_nonneg CHECK (balance >= 0) ); INSERT INTO accounts(owner, balance) VALUES   ('Alice', 50.00),   ('Bob', 10.00);

Приклад транзакції

-- Тепер пробуємо запустити транзакцію BEGIN;

-- Хочемо зняти 100 у Alice, але в неї 50 -- Так як ми маємо Constraint, який забезпечує те що баланс не може бути меншим, ніж 0 -- При виконанні такої транзакції ми отримаємо ROLLBACK так як узгодженість даних була порушена UPDATE accounts SET balance = balance - 100 WHERE owner = 'Alice';

COMMIT;

### Висновок Головне, що вам треба запамʼятати - це те що найбільш надійний спосіб забезпечити Consistency це використовувати правила, саме на рівні даних. Але тим не менше, зловживання нативними інструментами `DB` не завжди добре, так як веде до ускладнення системи. Тому в реальному житті, узгодження даних це завжди про `компроміси` між простотою і надійністю.

Short Answer

Interview ready
Premium

A concise answer to help you respond confidently on this topic during an interview.

Finished reading?
Practice Problems