This commit is contained in:
2025-11-07 13:07:30 +01:00
parent 8be8d2b39a
commit 7432ff5cf1
3 changed files with 62 additions and 51 deletions

View File

@@ -1,14 +1,16 @@
# Glossaire
Français | Anglais
--- |---
compte | account
Français | Anglais
--- |---
compte | account
titulaire _de compte_ | _account_ holder
numéro de compte | account number
solde | balance
montant | amount
parts de propriété | share
opération | operation
transaction | transaction
solde | balance
montant | amount
parts de propriété | share
opération | operation
transaction | transaction
crédit | credit
débit | debit
Source : Glossaire bilingue des termes de la microfinance par le CGAP (Consultative Group to Assist the Poor) - Cercle de réflexion de Washington, D.C. https://www.cgap.org/research/publication/cgap-glossary-of-microfinance-terms-english-to-french

View File

@@ -11,7 +11,6 @@ Vous êtes chargé(e) de concevoir et dimplémenter le schéma relationnel de
5. Les virements entre compte.
6. Les devises et les taux de change.
L'objectif de ces travaux pratiques est de :
- Concevoir un **modèle relationnel** à partir dun scénario réaliste.
@@ -77,7 +76,6 @@ erDiagram
- Chaque titulaire peut détenir **un** ou **plusieurs comptes**.
- Un compte bancaire doit pouvoir appartenir à **un** ou **plusieurs titulaires** (compte individuel / compte joint).
- Chaque compte dispose dun numéro de compte unique, dun solde et d'une date d'ouverture.
- Le solde des comptes ne peuvent être négatifs.
- Dans le cas d'un compte joint, les parts de propriété d'un compte doivent pouvoir être précisées.
```mermaid
@@ -205,7 +203,7 @@ 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`.
@@ -232,7 +230,7 @@ On stocke un seul champ `montant`.
* **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.
@@ -257,7 +255,7 @@ Une seule des deux contient une valeur non nulle.
`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`).
@@ -284,7 +282,7 @@ 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).
@@ -398,7 +396,9 @@ erDiagram
---
# Implémentation du modèle
# Séance 2 : Implémentation du modèle
Voir la syntaxe de [postgreSQL](syntaxe.md)
### 1. Titulaires
@@ -424,11 +424,11 @@ Il existe deux méthodes pour gérer le type.
- Lister tous les titulaires. Pour réutiliser rapidement la requête enregistrer la dans une vue.
- Supprimer un titulaire, vérifier que cela supprime l'individu ou la société correspondante.
### 3. Pour aller plus loin
#### 1.3 Pour aller plus loin
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
#### 1.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**.
@@ -443,12 +443,12 @@ begin;
commit;
```
### 5. Procédure stockée
#### 1.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**.
#### Créez une **procédure stockée** appelée `create_person_holder`.
Créez une **procédure stockée** appelée `create_person_holder`.
Cette procédure prend en paramètre :
@@ -467,43 +467,13 @@ Cette procédure doit :
* La procédure doit **refuser la création** et afficher une erreur claire.
En PL/pgSQL les **procédures** sécrivent :
```sql
create or replace procedure nom_procedure(paramètres)
language plpgsql
as $$
declare
-- variables locales
begin
-- instructions SQL
end;
$$;
```
Pour afficher un message de réussite :
```sql
raise notice 'message %', variable;
```
Vous pouvez déclencher une erreur métier à laide de :
```sql
raise exception 'message';
```
Pour appeler la procédure stockée
```sql
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
### 2. Les comptes
- Le solde des comptes ne peuvent être négatifs.
- Créez un compte joint à 50/50 pour Françoise et Justin.
Écrire une requête pour vérifier la somme des parts
@@ -593,3 +563,7 @@ Doit refuser la création avec une erreur claire :
```
ERROR: La somme des parts (1.1000) doit être égale à 1.0000
```
### 3. Les opérations et transactions
Implémenter les transactions et opérations.

35
syntaxe.md Normal file
View File

@@ -0,0 +1,35 @@
# Syntaxe PostgreSQL
## Procédures stockées
```sql
create or replace procedure nom_procedure(paramètres)
language plpgsql
as $$
declare
-- variables locales
begin
-- instructions SQL
end;
$$;
```
Pour appeler la procédure stockée
```sql
call nom_procedure('Félicien', 'Hébrard', '1970-10-15');
```
## Afficher des messages
Pour afficher un message de réussite :
```sql
raise notice 'message %', variable;
```
Vous pouvez déclencher une erreur métier à laide de :
```sql
raise exception 'message';
```