Sobes.tech
Middle+

Oddiy bank tizimini model qilish: - `accounts` jadvali: - `id`, - `owner_id`, - `currency`, - `created_at`. - `transactions` jadvali: - `id`, - `account_id`, - `amount`, - `created_at`. **Talablar:** 1. Kerakli cheklovlar bilan sxemani yaratish uchun SQL yozing (NOT NULL, FK, `amount` uchun CHECK). 2. So'rov yozing: - `account_id` bo'yicha hisobning hozirgi balansini oling (summa `amount`). 3. Qo'shimcha qiyinchilik: debet/kreditni qo'llab-quvvatlash (ikkilamchi yozuv). Tozalash.

sobes.tech AI

AIdan javob

sql -- 1. Шема яратиш CREATE TABLE hisoblar ( id SERIAL PRIMARY KEY, owner_id INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() );

CREATE TABLE operatsiyalar ( id SERIAL PRIMARY KEY, account_id INT NOT NULL REFERENCES hisoblar(id) ON DELETE CASCADE, amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW() );

-- 2. account_id бўйича ҳозирги балансни олиш учун сўров SELECT COALESCE(SUM(amount), 0) AS balance FROM operatsiyalar WHERE account_id = $1;

-- 3. Қийинчилик: дебет/кредитни қўллаш (икки ёзув) -- Ҳар бир операция икки ёзувдан иборат бўлиши кутилмоқда: дебет ва кредит -- Бу учун ledger_entries жадвали қўшилиши мумкин: CREATE TABLE ledger_entries ( id SERIAL PRIMARY KEY, transaction_id INT NOT NULL, account_id INT NOT NULL REFERENCES hisoblar(id), amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT fk_transaction FOREIGN KEY (transaction_id) REFERENCES operatsiyalar(id) ON DELETE CASCADE );

-- Ҳозирда, operatsiyalar жадвали умумий маълумотларни сақлайди (масалан, тавсиф, сана) -- Ҳисоб балансини ledger_entriesдаги amount суммаси ҳисоблайди: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;

"""

Шу тарзда, иккита ёзув ledger_entriesда таъминланади: бири отрицателий amount (чеклов), иккинчиси положительный (қўшиш). Бу банк тизимларида анъанавий ҳисобот ёндашуви.