DEV Community

Santhosh V
Santhosh V

Posted on

CA 35 - Consistency

I worked on a simple wallet system like GPay / PhonePe / Paytm.
Users can:

Store money
Send money
View transaction history

even a small mistake can cause:
Money loss
Duplicate transactions
Wrong balances

created a simple accounts table:

CREATE TABLE accounts (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    balance INT NOT NULL CHECK (balance >= 0),
    last_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Enter fullscreen mode Exit fullscreen mode

Added some dummy data:

INSERT INTO accounts (name, balance)
VALUES
('Alice', 1000),
('Bob', 500);
Enter fullscreen mode Exit fullscreen mode

Now I tried some invalid operations to see what happens.

Case 1: Sending more money than available

UPDATE accounts
SET balance = balance - 2000
WHERE name = 'Alice';

Enter fullscreen mode Exit fullscreen mode

Alice has only 1000

Result: Query fails

Reason:
CHECK (balance >= 0) does not allow negative balance

Case 2: Directly setting negative balance

UPDATE accounts
SET balance = -100
WHERE name = 'Bob';
Enter fullscreen mode Exit fullscreen mode

The database is enforcing rules (constraints).
This rule:

CHECK (balance >= 0)
Enter fullscreen mode Exit fullscreen mode

ensures:
Balance is always valid No negative values This is handled automatically by the database

Top comments (0)