Corrections

This commit is contained in:
2025-11-06 09:35:06 +01:00
parent 2b2d2c0c6e
commit ec48b5eeef

141
banque.md
View File

@@ -6,7 +6,7 @@ Vous êtes chargé(e) de concevoir et dimplémenter le schéma relationnel de
1. Les clients de la banque, 1. Les clients de la banque,
2. Les comptes bancaires, 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. 4. Les dépots et les retraits d'argent.
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.
@@ -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. 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. 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 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 dimmatriculation FR19803269968. - une entreprise nommée _Boulangerie de Valorgue_, créée le 19 août 2014, numéro dimmatriculation FR19803269968.
@@ -47,14 +49,6 @@ Un clients de la banque est appelé un titulaire. Il peut être une personne phy
- La suppression dun `holder` doit supprimer automatiquement la ligne correspondante dans `person` ou `company`. - La suppression dun `holder` doit supprimer automatiquement la ligne correspondante dans `person` ou `company`.
- Le type doit être contraint à `'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 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é.
### 1.6 Conclusion ### 1.6 Conclusion
@@ -78,19 +72,20 @@ erDiagram
company { company {
bigint id PK bigint id PK
text registration_numer text registration_number
date creation_date date creation_date
} }
holder { holder {
bigint id PK bigint id PK
date creation_date date creation_date
text type
} }
%% Relations %% Relations
person ||--|| holder : is person |o--|| holder : is
company ||--|| holder : is company |o--|| holder : is
``` ```
## 2. Les comptes ## 2. Les comptes
@@ -107,20 +102,6 @@ erDiagram
- Ajouter un nouveau titulaire : Justin Hébrard né le 11/03/1993. - Ajouter un nouveau titulaire : Justin Hébrard né le 11/03/1993.
- Créez un compte joint à 50/50 pour Françoise et Justin. - Créez un compte joint à 50/50 pour Françoise et Justin.
## 3. 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**.
Chaque commande SQL est exécutée indépendamment. Si la deuxième commande échoue, la première nest pas annulée automatiquement.
Réalisez linsertion dun titulaire complet (dans holder et person) à laide dune **transaction**.
Testez le cas où la contrainte dâge échoue et vérifiez que rien nest inséré dans holder.
```sql
begin;
...
commit;
```
```mermaid ```mermaid
erDiagram erDiagram
@@ -133,7 +114,7 @@ erDiagram
company { company {
bigint id PK bigint id PK
text registration_numer text registration_number
date creation_date date creation_date
} }
@@ -144,6 +125,7 @@ erDiagram
holder { holder {
bigint id PK bigint id PK
date creation_date date creation_date
text type
} }
account { account {
@@ -158,17 +140,73 @@ erDiagram
bigint holder_id FK bigint holder_id FK
decimal share decimal share
} }
exchange_rate {
date date PK
text currency_code PK
decimal rate
}
transaction {
operation {
bigint id PK bigint id PK
date transaction_date bigint transaction_id FK
text account FK
decimal amount decimal amount
text direction
} }
currency { %% Relations
text code PK
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 { currency {
text code PK text code PK
} }
@@ -187,18 +225,17 @@ erDiagram
operation { operation {
bigint id PK bigint id PK
bigint transaction_id bigint transaction_id FK
text source_account text account FK
text target_account
decimal amount decimal amount
text direction text direction
} }
%% Relations %% Relations
person ||--|| holder : is person |o--|| holder : is
company ||--|| holder : is company |o--|| holder : is
bank ||--|| holder : is bank |o--|| holder : is
holder }|--|{ account_holder : a holder }|--|{ account_holder : a
account_holder }|--|{ account : hold account_holder }|--|{ account : hold
currency ||--|{ account : tenu currency ||--|{ account : tenu
@@ -208,6 +245,32 @@ erDiagram
operation }o--|| account : concerne 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 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é.
## 3. 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**.
Chaque commande SQL est exécutée indépendamment. Si la deuxième commande échoue, la première nest pas annulée automatiquement.
Réalisez linsertion dun titulaire complet (dans holder et person) à laide dune **transaction**.
Testez le cas où la contrainte dâge échoue et vérifiez que rien nest inséré dans holder.
```sql
begin;
...
commit;
```
## 4. Procédure stockée ## 4. 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,