diff --git a/banque.glossaire.md b/banque.glossaire.md index 85d6467..2312ecb 100644 --- a/banque.glossaire.md +++ b/banque.glossaire.md @@ -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 diff --git a/banque.md b/banque.md index 3ead1a3..021dfa4 100644 --- a/banque.md +++ b/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. diff --git a/syntaxe.md b/syntaxe.md new file mode 100644 index 0000000..ca623ff --- /dev/null +++ b/syntaxe.md @@ -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'; +```