Моделгиросяи одовари содироти системи бонк: - Таблиса `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Таблиса `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Талабҳо:** 1. SQL нависед барои сохтани схемаи бо маҳдудиятҳои зарурӣ (NOT NULL, FK, CHECK дар `amount` на нулӣ). 2. Савол нависед: - ҳозираи балансро барои `account_id` (ҷамъи `amount`) гиред. 3. Қиинӣ иловагӣ: дастгирӣ кардани дебит/кредит (навишти дукарата). Тозакунӣ.
sobes.tech AI
Ҷавоб аз AI
sql -- 1. Шемаи эҷод кардан CREATE TABLE ҳисобҳо ( id SERIAL PRIMARY KEY, owner_id INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() );
CREATE TABLE амалиётҳо ( id SERIAL PRIMARY KEY, account_id INT NOT NULL REFERENCES ҳисобҳо(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 амалиётҳо 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 ҳисобҳо(id), amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT fk_transaction FOREIGN KEY (transaction_id) REFERENCES амалиётҳо(id) ON DELETE CASCADE );
-- Таблицаи амалиётҳо ҳоло маълумоти умумиро дар бораи интиқол нигоҳ медорад (масалан, тавсиф, сана) -- Баланс дар ҳисоб ҳамчун ҷамъоварии amount аз ledger_entries ҳисоб карда мешавад: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;
"""
Ин гуна, сабтҳои дукарата бо ду сабт дар ledger_entries таъмин карда мешаванд: яке бо amount манфӣ (хароҷот), дигар бо мусбӣ (даромад). Ин як усули классикӣ дар ҳисобдорӣ дар системҳои бонкӣ мебошад.