From ef299e0e3a8f231bab16eec8ee29ae55f52602e6 Mon Sep 17 00:00:00 2001 From: medina5 Date: Sat, 15 Nov 2025 21:22:02 +0100 Subject: [PATCH] tables --- banque.tables.md | 49 +++++++++++++++++++++++++++++++++++------------- 1 file changed, 36 insertions(+), 13 deletions(-) diff --git a/banque.tables.md b/banque.tables.md index 7291ce2..00bd551 100644 --- a/banque.tables.md +++ b/banque.tables.md @@ -20,11 +20,26 @@ create table holder ( - `bigint` : entier sur 64 bits - `primary key` : clé primaire, identification unique de l'enregristrement - `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. -- Le type est forcé aux 3 valeurs de l'énumération `holder_type` -- `current_timestamp` date **et** heure courante. Version moderne de `now()` +- `default` défini une valeur par défaut +- `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`. @@ -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 create table company ( "id" bigint primary key references holder(id) on delete cascade, "name" text not null, - "registration_number" text unique not null, + "registration_number" text unique, "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 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 ```sql @@ -85,6 +102,8 @@ create table account ( ); ``` +Les liasons (refrences) ne sont pas obligatoirement des entiers. + ```sql create table account_holder ( "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 ```sql @@ -113,3 +134,5 @@ create table operation ( 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.