diff --git a/banque.md b/banque.md index 0330b3d..aea00a8 100644 --- a/banque.md +++ b/banque.md @@ -23,7 +23,7 @@ La diffusion de cette application est internationale, vous vous efforcerez d'uti Pour les entités vous utiliserez le singuler et écrirez le tout en minuscule. -## Le Diagramme Entités Relations (ERD) +## Séance 1 : Le Diagramme Entités Relations (ERD) ### 1. Les titulaires @@ -34,7 +34,7 @@ Un clients de la banque est appelé un titulaire. Il peut être une personne phy - une personne nommée _Françoise Zanetti_, née le 12 avril 1995. - une entreprise nommée _Boulangerie de Valorgue_, créée le 19 août 2014, numéro d’immatriculation FR19803269968. -### 1.2 Analyse +#### 1.2 Analyse - Quelles informations faut-il conserver pour tous les titulaires ? - Quelles informations sont spécifiques à chaque type de titulaire ? @@ -43,7 +43,7 @@ Un clients de la banque est appelé un titulaire. Il peut être une personne phy > [!TIP] > Indice : on peut utiliser une table abstraite `holder`, puis des tables `person` et `company` qui héritent logiquement de celle-ci. -### 1.3 Contraintes à respecter +#### 1.3 Contraintes à respecter - Chaque `person` ou `company` doit correspondre à exactement un seul `holder`. - La suppression d’un `holder` doit supprimer automatiquement la ligne correspondante dans `person` ou `company`. @@ -85,7 +85,7 @@ erDiagram company |o--|| holder : is ``` -## 2. Les comptes +### 2. Les comptes - Chaque titulaire peut détenir un ou plusieurs compte. - Un compte bancaire doit pouvoir appartenir à un ou plusieurs titulaires (compte individuel / compte joint). @@ -201,6 +201,16 @@ erDiagram ### 4. Les transactions +#### La double écriture comptable + +Jusqu’à présent, les dépôts et retraits modifiaient directement le solde d’un compte. +Mais dans un vrai système bancaire ou comptable, chaque opération financière doit être enregistrée en double : + +- Un débit sur un compte (celui qui reçoit) +- Un crédit sur un autre (celui qui cède) + +La somme des débits doit toujours être égale à la somme des crédits. + Chaque opération comporte au moins : * un **compte concerné** ; @@ -209,14 +219,14 @@ Chaque opération comporte au moins : * un **sens** (débit ou crédit). -## **Méthode 1 : montant relatif (positif/négatif)** +#### **Méthode 1 : montant relatif (positif/négatif)** On stocke un seul champ `montant`. * **Crédit** → montant positif * **Débit** → montant négatif -### Exemple +##### Exemple | id | compte | date | montant | | -- | ------ | ---------- | ------- | @@ -224,49 +234,49 @@ On stocke un seul champ `montant`. | 2 | 123 | 2025-11-07 | -50.00 | -### Avantages +##### Avantages * **Simple à manipuler** pour les calculs (sommes, soldes, agrégations). * Pas besoin de colonne supplémentaire pour le sens. * Représente naturellement le comportement du solde d’un compte. -### Inconvénients +##### Inconvénients * Le **signe a une signification métier** implicite → risque d’erreur d’interprétation. * **Moins lisible** pour les utilisateurs finaux ou pour des exports comptables. * Pas toujours compatible avec les règles de la **comptabilité en partie double** (où débit et crédit doivent être visibles séparément). -## **Méthode 2 : deux colonnes (débit / crédit)** +#### **Méthode 2 : deux colonnes (débit / crédit)** Deux colonnes numériques, l’une pour le débit, l’autre pour le crédit. Une seule des deux contient une valeur non nulle. -### Exemple +##### Exemple | id | compte | date | debit | credit | | -- | ------ | ---------- | ----- | ------ | | 1 | 123 | 2025-11-06 | 0.00 | 200.00 | | 2 | 123 | 2025-11-07 | 50.00 | 0.00 | -### Avantages +##### Avantages * Très **clair visuellement** et **conforme aux usages comptables**. * Facilite les **exports vers des logiciels comptables**. * On peut facilement filtrer les débits et crédits séparément. -### Inconvénients +##### Inconvénients * **Redondance potentielle** (une des deux colonnes sera toujours à zéro). * Les calculs de soldes nécessitent des **expressions plus complexes** : `SUM(credit) - SUM(debit)` * Risque d’incohérence si les deux colonnes contiennent des valeurs remplies par erreur. -## **Méthode 3 : montant absolu + colonne sens ('D' / 'C')** +#### **Méthode 3 : montant absolu + colonne sens ('D' / 'C')** Le montant est toujours positif. Le sens est indiqué par une lettre (`D` ou `C`). -### Exemple +##### Exemple | id | compte | date | montant | sens | | -- | ------ | ---------- | ------- | ---- | @@ -274,13 +284,13 @@ Le sens est indiqué par une lettre (`D` ou `C`). | 2 | 123 | 2025-11-07 | 50.00 | D | -### Avantages +##### Avantages * **Lisible** et **intuitif** : correspond au vocabulaire métier. * Facilite la lecture humaine et les exports comptables. * Pas d’ambiguïté sur le signe numérique. -### Inconvénients +##### Inconvénients * Nécessite une **jointure logique** du sens pour les calculs : `SUM(CASE WHEN sens='C' THEN montant ELSE -montant END)` @@ -288,31 +298,31 @@ Le sens est indiqué par une lettre (`D` ou `C`). * L’usage de lettres rend le **stockage un peu moins compact** (mais négligeable en pratique). -## **Méthode 4 : montant absolu + colonne sens numérique (1 / -1)** +#### **Méthode 4 : montant absolu + colonne sens numérique (1 / -1)** Le montant est toujours positif, et une colonne numérique `sens` vaut `1` (crédit) ou `-1` (débit). -### Exemple +##### Exemple | id | compte | date | montant | sens | | -- | ------ | ---------- | ------- | ---- | | 1 | 123 | 2025-11-06 | 200.00 | 1 | | 2 | 123 | 2025-11-07 | 50.00 | -1 | -### Avantages +##### Avantages * **Compact et performant** pour les calculs : `SUM(montant * sens)` donne directement le solde. * Moins d’ambiguïté qu’un signe caché dans le montant. * Combine la **rigueur du modèle mathématique** avec la **clarté du stockage absolu**. -### Inconvénients +##### Inconvénients * **Moins lisible** pour un utilisateur non technique. * Moins standard pour la comptabilité classique (on préfère `D` / `C`). * Nécessite une convention claire sur la signification de `1` et `-1`. -## Synthèse comparative +#### Synthèse comparative | Méthode | Structure | Lisibilité | Facilité calculs | Conformité comptable | Risque d'erreur | | ------- | ---------------------- | ---------- | ---------------- | -------------------- | --------------- | @@ -419,8 +429,7 @@ erDiagram La banque souhaite désormais que toute personne titulaire d’un compte ait au moins 15 ans à la date de création de sa fiche. Il n'y a pas de restriction sur l'âge de la société. - -## 4. L'intégrité des données +### 4. L'intégrité des données Lorsque l’on tente d'insèrer une nouvelle personne qui n'a pas l'âge requis. La ligne dans `holder` est d'abord créée, puis l'insertion dans `person` échoue à cause de la vérification d'âge. Mais la ligne du titulaire est toujours présente **sans être rattachée** à une personne. On parle alors d'enregistrement **orphelin**. @@ -435,7 +444,7 @@ begin; commit; ``` -## 5. Procédure stockée +### 5. Procédure stockée Pour fiabiliser le process et être sûr que l'execution s'effectue toujours dans une transaction, nous allons encapsuler la création d’un titulaire dans une **procédure stockée**. @@ -494,7 +503,7 @@ call create_person_holder('Félicien', 'Hébrard', '1970-10-15'); >[!NOTE] > La procédure garantit l’**atomicité** : soit tout est créé, soit rien. -## 6. Cohérence des données +### 6. Cohérence des données Écrire une requête pour vérifier la somme des parts @@ -555,7 +564,7 @@ select sum(unnest(p_shares)); raise exception 'La somme des parts doit être égale à 1 (%.4f)', somme; ``` -### Exemples d’appel +#### Exemples d’appel ```sql call create_account( @@ -583,13 +592,3 @@ Doit refuser la création avec une erreur claire : ``` ERROR: La somme des parts (1.1000) doit être égale à 1.0000 ``` - -## La double écriture comptable - -Jusqu’à présent, les dépôts et retraits modifiaient directement le solde d’un compte. -Mais dans un vrai système bancaire ou comptable, chaque opération financière doit être enregistrée en double : - -- Un débit sur un compte (celui qui reçoit) -- Un crédit sur un autre (celui qui cède) - -La somme des débits doit toujours être égale à la somme des crédits.