Modéliser un système bancaire simple: - Table `accounts`: - `id`, - `owner_id`, - `currency`, - `created_at`. - Table `transactions`: - `id`, - `account_id`, - `amount`, - `created_at`. **Exigences:** 1. Écrire SQL pour créer le schéma avec les contraintes nécessaires (NOT NULL, FK, CHECK sur `amount` non nul). 2. Écrire une requête: - obtenir le solde actuel du compte par `account_id` (somme de `amount`). 3. Difficulté supplémentaire : supporter débit/crédit (enregistrement double). Nettoyage.
sobes.tech IA
Réponse de l'IA
sql -- 1. Création du schéma CREATE TABLE comptes ( id SERIAL PRIMARY KEY, owner_id INT NOT NULL, currency VARCHAR(3) NOT NULL, created_at TIMESTAMP NOT NULL DEFAULT NOW() );
CREATE TABLE transactions ( id SERIAL PRIMARY KEY, account_id INT NOT NULL REFERENCES comptes(id) ON DELETE CASCADE, amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW() );
-- 2. Requête pour obtenir le solde actuel par account_id SELECT COALESCE(SUM(amount), 0) AS balance FROM transactions WHERE account_id = $1;
-- 3. Complexification : support du débit/crédit (enregistrement double) -- On suppose que chaque transaction consiste en deux enregistrements : débit et crédit -- Pour cela, on peut ajouter la table ledger_entries avec les champs : CREATE TABLE ledger_entries ( id SERIAL PRIMARY KEY, transaction_id INT NOT NULL, account_id INT NOT NULL REFERENCES comptes(id), amount NUMERIC NOT NULL CHECK (amount <> 0), created_at TIMESTAMP NOT NULL DEFAULT NOW(), CONSTRAINT fk_transaction FOREIGN KEY (transaction_id) REFERENCES transactions(id) ON DELETE CASCADE );
-- La table transactions stocke désormais des informations générales sur le transfert (par exemple, description, date) -- Le solde du compte est calculé comme la somme de amount dans ledger_entries : SELECT COALESCE(SUM(amount), 0) AS balance FROM ledger_entries WHERE account_id = $1;
"""
Ainsi, l'enregistrement double est assuré par deux enregistrements dans ledger_entries : un avec amount négatif (dépense), l'autre avec positif (crédit). C'est une approche classique en comptabilité dans les systèmes bancaires.