This commit is contained in:
2025-11-07 07:13:51 +01:00
parent e36c4f9f18
commit 58a521f39f

View File

@@ -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 dimmatriculation 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 dun `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 dun 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 dun compte.
### Inconvénients
##### Inconvénients
* Le **signe a une signification métier** implicite → risque derreur dinterpré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, lune pour le débit, lautre 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 dincohé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 dambiguï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`).
* Lusage 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 dambiguïté quun 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 dun 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 lon 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 dun 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 dappel
#### Exemples dappel
```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 dun 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.