syntaxe
This commit is contained in:
@@ -1,14 +1,16 @@
|
|||||||
# Glossaire
|
# Glossaire
|
||||||
|
|
||||||
Français | Anglais
|
Français | Anglais
|
||||||
--- |---
|
--- |---
|
||||||
compte | account
|
compte | account
|
||||||
titulaire _de compte_ | _account_ holder
|
titulaire _de compte_ | _account_ holder
|
||||||
numéro de compte | account number
|
numéro de compte | account number
|
||||||
solde | balance
|
solde | balance
|
||||||
montant | amount
|
montant | amount
|
||||||
parts de propriété | share
|
parts de propriété | share
|
||||||
opération | operation
|
opération | operation
|
||||||
transaction | transaction
|
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
|
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.
|
5. Les virements entre compte.
|
||||||
6. Les devises et les taux de change.
|
6. Les devises et les taux de change.
|
||||||
|
|
||||||
|
|
||||||
L'objectif de ces travaux pratiques est de :
|
L'objectif de ces travaux pratiques est de :
|
||||||
|
|
||||||
- Concevoir un **modèle relationnel** à partir d’un scénario réaliste.
|
- 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**.
|
- Chaque titulaire peut détenir **un** ou **plusieurs comptes**.
|
||||||
- Un compte bancaire doit pouvoir appartenir à **un** ou **plusieurs titulaires** (compte individuel / compte joint).
|
- 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.
|
- 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.
|
- Dans le cas d'un compte joint, les parts de propriété d'un compte doivent pouvoir être précisées.
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
@@ -205,7 +203,7 @@ Chaque opération comporte au moins :
|
|||||||
* un **sens** (débit ou crédit).
|
* 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`.
|
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.
|
* **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).
|
* 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.
|
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.
|
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)`
|
`SUM(credit) - SUM(debit)`
|
||||||
* Risque d’incohérence si les deux colonnes contiennent des valeurs remplies par erreur.
|
* 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 montant est toujours positif.
|
||||||
Le sens est indiqué par une lettre (`D` ou `C`).
|
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).
|
* 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).
|
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
|
### 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.
|
- 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.
|
- 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é.
|
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**.
|
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;
|
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,
|
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**.
|
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 :
|
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.
|
* 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]
|
>[!NOTE]
|
||||||
> La procédure garantit l’**atomicité** : soit tout est créé, soit rien.
|
> 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.
|
- Créez un compte joint à 50/50 pour Françoise et Justin.
|
||||||
|
|
||||||
Écrire une requête pour vérifier la somme des parts
|
É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
|
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