diff --git a/banque.md b/banque.md index 7043a8a..ad487a2 100644 --- a/banque.md +++ b/banque.md @@ -6,7 +6,7 @@ Vous êtes chargé(e) de concevoir et d’implémenter le schéma relationnel de 1. Les clients de la banque, 2. Les comptes bancaires, -3. Le lien entre les titulaires et les comptes. +3. Le lien entre les clients et les comptes. 4. Les dépots et les retraits d'argent. 5. Les virements entre compte. 6. Les devises et les taux de change. @@ -23,11 +23,13 @@ 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. -## 1. Les titulaires +## Le Diagramme Entités Relations (ERD) + +### 1. Les titulaires Un clients de la banque est appelé un titulaire. Il peut être une personne physique ou une entreprise. -### 1.1 Exemple de données +#### 1.1 Exemple de données - 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 d’immatriculation FR19803269968. @@ -47,14 +49,6 @@ Un clients de la banque est appelé un titulaire. Il peut être une personne phy - La suppression d’un `holder` doit supprimer automatiquement la ligne correspondante dans `person` ou `company`. - Le type doit être contraint à `'PERSON'` ou `'COMPANY'`. -### 1.4 Vérifications - -- 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. - -### 1.5 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é. ### 1.6 Conclusion @@ -78,19 +72,20 @@ erDiagram company { bigint id PK - text registration_numer + text registration_number date creation_date } holder { bigint id PK date creation_date + text type } %% Relations - person ||--|| holder : is - company ||--|| holder : is + person |o--|| holder : is + company |o--|| holder : is ``` ## 2. Les comptes @@ -107,20 +102,6 @@ erDiagram - Ajouter un nouveau titulaire : Justin Hébrard né le 11/03/1993. - Créez un compte joint à 50/50 pour Françoise et Justin. -## 3. 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**. - -Chaque commande SQL est exécutée indépendamment. Si la deuxième commande échoue, la première n’est pas annulée automatiquement. - -Réalisez l’insertion d’un titulaire complet (dans holder et person) à l’aide d’une **transaction**. -Testez le cas où la contrainte d’âge échoue et vérifiez que rien n’est inséré dans holder. - -```sql -begin; -... -commit; -``` ```mermaid erDiagram @@ -133,7 +114,7 @@ erDiagram company { bigint id PK - text registration_numer + text registration_number date creation_date } @@ -144,6 +125,7 @@ erDiagram holder { bigint id PK date creation_date + text type } account { @@ -158,17 +140,73 @@ erDiagram bigint holder_id FK decimal share } + + exchange_rate { + date date PK + text currency_code PK + decimal rate + } - transaction { + + operation { bigint id PK - date transaction_date + bigint transaction_id FK + text account FK decimal amount + text direction } - currency { - text code PK + %% Relations + + person |o--|| holder : is + company |o--|| holder : is + bank |o--|| holder : is + holder }|--|{ account_holder : a + account_holder }|--|{ account : hold + operation }o--|| account : concerne + operation }o--|| account : concerne +``` + +### 3. Les opérations + +```mermaid +erDiagram + person { + bigint id PK + text firstname + text lastname + date birthdate } + company { + bigint id PK + text registration_number + date creation_date + } + + bank { + bigint id PK + } + + holder { + bigint id PK + date creation_date + text type + } + + account { + bigint id PK + date creation_date + decimal balance + text currency_code FK + } + + account_holder { + bigint account_id FK + bigint holder_id FK + decimal share + } + currency { text code PK } @@ -187,18 +225,17 @@ erDiagram operation { bigint id PK - bigint transaction_id - text source_account - text target_account + bigint transaction_id FK + text account FK decimal amount text direction } %% Relations - person ||--|| holder : is - company ||--|| holder : is - bank ||--|| holder : is + person |o--|| holder : is + company |o--|| holder : is + bank |o--|| holder : is holder }|--|{ account_holder : a account_holder }|--|{ account : hold currency ||--|{ account : tenu @@ -208,6 +245,32 @@ erDiagram operation }o--|| account : concerne ``` +### 1.4 Vérifications + +- 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. + +### 1.5 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é. + + +## 3. 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**. + +Chaque commande SQL est exécutée indépendamment. Si la deuxième commande échoue, la première n’est pas annulée automatiquement. + +Réalisez l’insertion d’un titulaire complet (dans holder et person) à l’aide d’une **transaction**. +Testez le cas où la contrainte d’âge échoue et vérifiez que rien n’est inséré dans holder. + +```sql +begin; +... +commit; +``` + + ## 4. Procédure stockée Pour fiabiliser le process et être sûr que l'execution s'effectue toujours dans une transaction,