syntaxe
This commit is contained in:
@@ -10,5 +10,7 @@ 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
|
||||
|
||||
60
banque.md
60
banque.md
@@ -11,7 +11,6 @@ Vous êtes chargé(e) de concevoir et d’implé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 d’un 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 d’un numéro de compte unique, d’un 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, l’une pour le débit, l’autre 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 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`).
|
||||
@@ -284,7 +282,7 @@ 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).
|
||||
|
||||
@@ -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 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
|
||||
#### 1.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**.
|
||||
|
||||
@@ -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 d’un 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 à l’aide 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
35
syntaxe.md
Normal 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 à l’aide de :
|
||||
|
||||
```sql
|
||||
raise exception 'message';
|
||||
```
|
||||
Reference in New Issue
Block a user