Corrections
This commit is contained in:
145
banque.md
145
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 {
|
||||
@@ -159,14 +141,70 @@ erDiagram
|
||||
decimal share
|
||||
}
|
||||
|
||||
transaction {
|
||||
bigint id PK
|
||||
date transaction_date
|
||||
decimal amount
|
||||
exchange_rate {
|
||||
date date PK
|
||||
text currency_code PK
|
||||
decimal rate
|
||||
}
|
||||
|
||||
currency {
|
||||
text code PK
|
||||
|
||||
operation {
|
||||
bigint id PK
|
||||
bigint transaction_id FK
|
||||
text account FK
|
||||
decimal amount
|
||||
text direction
|
||||
}
|
||||
|
||||
%% 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 {
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user