Sobes.tech
Middle+

Modelējiet vienkāršu bankas sistēmu: - `accounts` tabula: - `id`, - `owner_id`, - `currency`, - `created_at`. - `transactions` tabula: - `id`, - `account_id`, - `amount`, - `created_at`. **Prasības:** 1. Rakstiet SQL, lai izveidotu shēmu ar nepieciešamajiem ierobežojumiem (NOT NULL, FK, CHECK uz `amount`, lai tas nebūtu nulle). 2. Rakstiet vaicājumu: - iegūt pašreizējo konta bilanci pēc `account_id` (summa `amount`). 3. Papildu grūtības: atbalstīt debetu/kredītu (divkāršs ieraksts). Tīrīšana.

sobes.tech AI

Atbilde no AI

sql -- 1. Shēmas izveide CREATE TABLE konti ( id SERIAL PRIMARY KEY, owner_id INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() );

CREATE TABLE transakcijas ( id SERIAL PRIMARY KEY, account_id INT NOT NULL REFERENCES konti(id) ON DELETE CASCADE, amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW() );

-- 2. Vaicājums, lai iegūtu pašreizējo bilanci pēc account_id SELECT COALESCE(SUM(amount), 0) AS balance FROM transakcijas WHERE account_id = $1;

-- 3. Sarežģītība: debet/kredīts atbalsts (divkāršs ieraksts) -- Pieņem, ka katra transakcija sastāv no diviem ierakstiem: debets un kredīts -- Tam var pievienot ledger_entries tabulu ar laukiem: CREATE TABLE ledger_entries ( id SERIAL PRIMARY KEY, transaction_id INT NOT NULL, account_id INT NOT NULL REFERENCES konti(id), amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT fk_transaction FOREIGN KEY (transaction_id) REFERENCES transakcijas(id) ON DELETE CASCADE );

-- Tagad transakciju tabula glabā vispārīgu informāciju par pārskaitījumu (piem., apraksts, datums) -- Konta bilanci aprēķina kā amount summu no ledger_entries: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;

"""

Tādējādi, dubultā ieraksta nodrošināšanai tiek izmantoti divi ieraksti ledger_entries: viens ar negatīvu amount (izdevumi), otrs ar pozitīvu (ieņēmumi). Šis ir klasiskās grāmatvedības pieejas banku sistēmās.