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,
|
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 d’immatriculation FR19803269968.
|
- 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`.
|
- La suppression d’un `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 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
|
### 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 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
|
```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 {
|
||||||
@@ -159,14 +141,70 @@ erDiagram
|
|||||||
decimal share
|
decimal share
|
||||||
}
|
}
|
||||||
|
|
||||||
transaction {
|
exchange_rate {
|
||||||
bigint id PK
|
date date PK
|
||||||
date transaction_date
|
text currency_code PK
|
||||||
decimal amount
|
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 {
|
currency {
|
||||||
@@ -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 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
|
## 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,
|
||||||
|
|||||||
Reference in New Issue
Block a user