Sobes.tech
Middle+

სადაც მარტივი საბანკო სისტემა: - `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. հաշվի համար ընթացիկ բալանս ստանալու հարցում 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 );

-- Այժմ, գործարքների աղյուսակը պահում է ընդհանուր տեղեկություններ փոխանցման մասին (օր., նկարագրություն, ամսաթիվ) -- Հաշվի մնացորդը հաշվվում է ledger_entries-ում amount-ի գումարից: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;

"""

Այսպիսով, երկակի գրառում ապահովվում է երկու գրառումներով ledger_entries-ում՝ մեկը բացասական amount-ով (ծախս), մյուսը դրական (ընդունում): Սա դասական մոտեցում է բանկային համակարգերի հաշվապահության մեջ։