Жөнөкөй банк системасын моделдөө: - `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. Қосымша қиындық: дебет/кредитті қолдау (екі жазба). Тазалау.
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 );
-- Азыр, операциялар таблицасы жалпы маалыматтарды сактайт (мис., сүрөттөмө, дата) -- эсебинин балансын ledger_entriesдеги amount суммасы эсептейт: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;
"""
Мындай, эки жазуу ledger_entriesда эки жазуу менен камсыздалат: бири терс сумма менен (чыгым), экинчиси оң (кирим). Бул банктардын системаларындагы классикалык бухгалтердик ыкма.