Sobes.tech
Middle+

Modelar um sistema bancário simples: - Tabela `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Tabela `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Requisitos:** 1. Escrever SQL para criar o esquema com as restrições necessárias (NOT NULL, FK, CHECK em `amount` não nulo). 2. Escrever uma consulta: - obter o saldo atual da conta por `account_id` (soma de `amount`). 3. Dificuldade adicional: suportar débito/crédito (registro duplo). Limpeza.

sobes.tech IA

Resposta da IA

sql -- 1. Criação do esquema CREATE TABLE contas ( id SERIAL PRIMARY KEY, owner_id INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() );

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

-- 2. Consulta para obter o saldo atual por account_id SELECT COALESCE(SUM(amount), 0) AS balance FROM transacoes WHERE account_id = $1;

-- 3. Complexificação: suporte para débito/crédito (registo duplo) -- Assume-se que cada transação consiste em dois registos: débito e crédito -- Para isso, pode-se adicionar a tabela ledger_entries com os campos: CREATE TABLE ledger_entries ( id SERIAL PRIMARY KEY, transaction_id INT NOT NULL, account_id INT NOT NULL REFERENCES contas(id), amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT fk_transaction FOREIGN KEY (transaction_id) REFERENCES transacoes(id) ON DELETE CASCADE );

-- A tabela transacoes agora armazena informações gerais sobre a transferência (por exemplo, descrição, data) -- O saldo da conta é calculado como a soma de amount em ledger_entries: SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;

"""

Desta forma, o registo duplo é garantido por dois registos em ledger_entries: um com amount negativo (débito), outro com positivo (crédito). Esta é uma abordagem clássica na contabilidade de sistemas bancários.