Sobes.tech
Middle+
28

Қарапайым банктік жүйені моделдеңіз: - `accounts` кестесі: - `id`, - `owner_id`, - `currency`, - `created_at`. - `transactions` кестесі: - `id`, - `account_id`, - `amount`, - `created_at`. **Талаптар:** 1. Қажетті шектеулері бар схеманы құру үшін SQL жазыңыз (NOT NULL, FK, `amount`-тың нөлден басқа мәні үшін CHECK). 2. Сұрау жазыңыз: - `account_id` бойынша ағымдағы балансын алу (amount-тардың сомасы). 3. Қиындату: дебет/кредитті қолдау (екі жазба). Тазалау.

Сұралған компаниялар
101ХР101ХР

AI-дан жауап

sobes.tech AI

sql -- 1. Создание схемы CREATE TABLE accounts ( id SERIAL PRIMARY KEY, owner_id INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() );

CREATE TABLE transactions ( id SERIAL PRIMARY KEY, account_id INT NOT NULL REFERENCES accounts(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 transactions 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 accounts(id), amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT fk_transaction FOREIGN KEY (transaction_id) REFERENCES transactions(id) ON DELETE CASCADE );

-- Таблица transactions теперь хранит общую информацию о переводе (например, описание, дату) -- Баланс по счету считается как сумма amount из ledger_entries: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;


Таким образом, двойная запись обеспечивается двумя записями в ledger_entries: одна с отрицательным amount (списание), другая с положительным (зачисление). Это классический подход к учету в банковских системах.