Modeleer een eenvoudig banksysteem: - Tabel `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Tabel `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Vereisten:** 1. Schrijf SQL om het schema te maken met de benodigde beperkingen (NOT NULL, FK, CHECK op niet-nul `amount`). 2. Schrijf een query: - krijg het huidige saldo van de rekening op `account_id` (som van `amount`). 3. Extra uitdaging: ondersteuning voor debet/krediet (dubbele registratie). Opruimen.
sobes.tech AI
Antwoord van AI
sql -- 1. Schematype CREATE TABLE rekeningen ( id SERIAL PRIMARY KEY, owner_id INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() );
CREATE TABLE transacties ( id SERIAL PRIMARY KEY, account_id INT NOT NULL REFERENCES rekeningen(id) ON DELETE CASCADE, amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW() );
-- 2. Query om de huidige balans op te halen per account_id SELECT COALESCE(SUM(amount), 0) AS balance FROM transacties WHERE account_id = $1;
-- 3. Complexiteit: ondersteuning voor debet/krediet (dubbele registratie) -- Verondersteld wordt dat elke transactie uit twee records bestaat: debet en credit -- Hiervoor kan de tabel ledger_entries worden toegevoegd met de velden: CREATE TABLE ledger_entries ( id SERIAL PRIMARY KEY, transaction_id INT NOT NULL, account_id INT NOT NULL REFERENCES rekeningen(id), amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT fk_transaction FOREIGN KEY (transaction_id) REFERENCES transacties(id) ON DELETE CASCADE );
-- De tabel transacties slaat nu algemene informatie op over de overboeking (bijvoorbeeld, beschrijving, datum) -- Het saldo van de rekening wordt berekend als de som van amount uit ledger_entries: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;
"""
Op deze manier wordt dubbele boekhouding verzekerd door twee records in ledger_entries: één met negatieve amount (afschrijving), ander met positieve (bijschrijving). Dit is een klassieke aanpak in de boekhouding van banksystemen.