tables
This commit is contained in:
@@ -20,11 +20,26 @@ create table holder (
|
|||||||
- `bigint` : entier sur 64 bits
|
- `bigint` : entier sur 64 bits
|
||||||
- `primary key` : clé primaire, identification unique de l'enregristrement
|
- `primary key` : clé primaire, identification unique de l'enregristrement
|
||||||
- `generated always as identity` : incrémentation automatique (1, 2, 3, 4, ...)
|
- `generated always as identity` : incrémentation automatique (1, 2, 3, 4, ...)
|
||||||
|
- Le type est forcé aux 3 valeurs de l'énumération `holder_type` créé précédemment
|
||||||
- `not null` : Il est obligatoire de spécifier une valeur.
|
- `not null` : Il est obligatoire de spécifier une valeur.
|
||||||
- Le type est forcé aux 3 valeurs de l'énumération `holder_type`
|
- `default` défini une valeur par défaut
|
||||||
- `current_timestamp` date **et** heure courante. Version moderne de `now()`
|
- `current_timestamp` date **et** heure courante. Il est possible d'utiliser l'ancienne fonction `now()`
|
||||||
|
|
||||||
### 1.1 Les individus (person)
|
### 1.1 La banque (bank)
|
||||||
|
|
||||||
|
La banque est aussi un titulaire. Elle doit savoir ce qu'elle a en caisse, ce qui sort et ce qui rentre.
|
||||||
|
|
||||||
|
```sql
|
||||||
|
create table bank (
|
||||||
|
"id" bigint primary key references holder(id),
|
||||||
|
"name" text not null
|
||||||
|
);
|
||||||
|
```
|
||||||
|
|
||||||
|
- `references holder(id)` : lien sur le champ `id` de table `holder`.
|
||||||
|
Cette liaison interdit de supprimer le titulaire pour eviter que l'enregistrement banque se retrouve _orphelin_ de son titulaire.
|
||||||
|
|
||||||
|
### 1.2 Les individus (person)
|
||||||
|
|
||||||
Création de la table `person`.
|
Création de la table `person`.
|
||||||
|
|
||||||
@@ -37,27 +52,27 @@ create table person (
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.2 les sociétés (company)
|
- `on delete cascade` : Permet de supprimer le titulaire (`holder`) et **en même temps** l'individu (`person`).
|
||||||
|
- `check` : Permet de spécifier une règle de validation.
|
||||||
|
- `interval` : Simplifie le calcul sur les dates
|
||||||
|
- `current_date` : date du jour seule sans les heures (contrairement à `current_timestamp` ou `now()`)
|
||||||
|
|
||||||
|
### 1.3 les sociétés (company)
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
create table company (
|
create table company (
|
||||||
"id" bigint primary key references holder(id) on delete cascade,
|
"id" bigint primary key references holder(id) on delete cascade,
|
||||||
"name" text not null,
|
"name" text not null,
|
||||||
"registration_number" text unique not null,
|
"registration_number" text unique,
|
||||||
"creation_date" date not null
|
"creation_date" date not null
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
### 1.3 La banque (bank)
|
- `unique` : La valeur doit être unique (si elle est renseignée). Contrairement à une clé primaire la valeur peut être null.
|
||||||
|
|
||||||
```sql
|
|
||||||
create table bank (
|
|
||||||
"id" bigint primary key references holder(id),
|
|
||||||
"name" text
|
|
||||||
);
|
|
||||||
```
|
|
||||||
|
|
||||||
## 2. Les monnaies
|
|
||||||
|
## 2. Les devises
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
create table currency (
|
create table currency (
|
||||||
@@ -74,6 +89,8 @@ create table exchange_rate (
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
- La clé primaire est la combinaison de deux colonnes `currency_code` et `date`. Il ne peut y avoir qu'une ligne par devise et par jour. Il peut y avoir plusieurs devise par jour et une devise est côtée plusieurs jours.
|
||||||
|
|
||||||
## 3. Les comptes
|
## 3. Les comptes
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
@@ -85,6 +102,8 @@ create table account (
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Les liasons (refrences) ne sont pas obligatoirement des entiers.
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
create table account_holder (
|
create table account_holder (
|
||||||
"account_id" int not null references account(id) on delete cascade,
|
"account_id" int not null references account(id) on delete cascade,
|
||||||
@@ -94,6 +113,8 @@ create table account_holder (
|
|||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
C'est une table dite pivot. Elle possède deux liaisons de part et d'autre vers les comptes (`account`) et les titulaires (`holder`). La clé primaire est la combinaison des deux.
|
||||||
|
|
||||||
### 4. Les transactions
|
### 4. Les transactions
|
||||||
|
|
||||||
```sql
|
```sql
|
||||||
@@ -113,3 +134,5 @@ create table operation (
|
|||||||
direction text not null check (direction in ('DEBIT', 'CREDIT'))
|
direction text not null check (direction in ('DEBIT', 'CREDIT'))
|
||||||
);
|
);
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Il n'est pas nécessaire d'utiliser une énumération pour contraindre les deux valeurs de direction.
|
||||||
|
|||||||
Reference in New Issue
Block a user