From 62f782f28e2850bb248b49cc62e23517512e4950 Mon Sep 17 00:00:00 2001 From: medina474 Date: Mon, 8 Sep 2025 09:05:02 +0200 Subject: [PATCH] JSON --- Calculated.md | 67 +++++++++++++++++++++++++++++++++++++ Home.md | 2 ++ jointures/innerjoin.svg | 2 +- jointures/leftantijoin.svg | 2 +- jointures/leftjoin.svg | 2 +- jointures/rightantijoin.svg | 2 +- jointures/rightjoin.svg | 2 +- json.md | 19 +++++++++++ 8 files changed, 93 insertions(+), 5 deletions(-) create mode 100644 json.md diff --git a/Calculated.md b/Calculated.md index f6d3e24..51d2bfb 100644 --- a/Calculated.md +++ b/Calculated.md @@ -21,3 +21,70 @@ La fonction `ST_Length(geom)` est STABLE car pour une même géométrie, la long #### VOLATILE Le résultat peut changer même dans une seule requête. Par exemple : `random()` ou `now()` donnent des résultats différents à chaque appel. + +## Colonnes calculées + +> Une colonne calculée (ou dérivée) est une colonne dont la valeur n’est pas directement saisie par l’utilisateur, mais obtenue à partir d’une expression basée sur d’autres colonnes de la même table. + + +### Colonnes générées + +Il est possible de déclarer une colonne comme générée automatiquement et stockée. La valeur est calculée à l’insertion ou mise à jour et enregistrée physiquement dans la table. + +```sql +CREATE TABLE commande ( + id SERIAL PRIMARY KEY, + prix_unitaire NUMERIC(10,2), + quantite INTEGER, + total NUMERIC(10,2) GENERATED ALWAYS AS (prix_unitaire * quantite) STORED +); +``` + +- total est calculé automatiquement. +- On ne peut pas insérer ou modifier total directement, PostgreSQL s’en occupe. +- La valeur est stockée → plus rapide à lire, mais prend de la place. + +### Colonnes calculées via de vues + +Si l’on ne veut pas stocker la valeur (pour éviter la redondance), on peut utiliser une vue. + +```sql +CREATE VIEW commande_calculee AS +SELECT id, + prix_unitaire, + quantite, + prix_unitaire * quantite AS total +FROM commande; +``` + +ci total n’est pas stocké → il est recalculé à chaque requête. +Moins d’espace disque, mais peut être plus lent si beaucoup de calculs. + +Dans d’autres SGBD (MySQL, Oracle), il existe des colonnes générées virtuelles (calculées à la volée sans stockage). + +## Vérification + +> Une contrainte CHECK permet d’imposer une condition (une règle logique) sur les valeurs d’une colonne ou d’un ensemble de colonnes. + +On peut définir une contrainte CHECK : + +au niveau colonne + +```sql +CREATE TABLE employe ( + id SERIAL PRIMARY KEY, + nom TEXT NOT NULL, + age INT CHECK (age >= 18) -- contrainte sur une seule colonne +); +``` + +au niveau table (plusieurs colonnes possibles) + +```sql +CREATE TABLE commande ( + id SERIAL PRIMARY KEY, + prix_unitaire NUMERIC(10,2), + quantite INT, + CHECK (prix_unitaire >= 0 AND quantite > 0) -- règle sur plusieurs colonnes +); +``` diff --git a/Home.md b/Home.md index 742eab4..dd2edbd 100644 --- a/Home.md +++ b/Home.md @@ -6,9 +6,11 @@ - [Sous requêtes](sousrequete.md) - [Vues et fonctions](View.md) - [Fonctions de fenêtrage](window.md) +- [Colonnes calculées](Calculated.md) - [Intervalles](intervalle.md) - [Arbres](Arbres.md) - [Données spatiales](Spatial.md) +- [Données JSON](json.md) ## Exercices diff --git a/jointures/innerjoin.svg b/jointures/innerjoin.svg index 942a9f9..2672364 100644 --- a/jointures/innerjoin.svg +++ b/jointures/innerjoin.svg @@ -1,5 +1,5 @@ - + diff --git a/jointures/leftantijoin.svg b/jointures/leftantijoin.svg index 261e433..e153b7b 100644 --- a/jointures/leftantijoin.svg +++ b/jointures/leftantijoin.svg @@ -1,5 +1,5 @@ - + diff --git a/jointures/leftjoin.svg b/jointures/leftjoin.svg index 69516d9..88ee4d7 100644 --- a/jointures/leftjoin.svg +++ b/jointures/leftjoin.svg @@ -1,5 +1,5 @@ - + diff --git a/jointures/rightantijoin.svg b/jointures/rightantijoin.svg index 97f95d7..c3075a5 100644 --- a/jointures/rightantijoin.svg +++ b/jointures/rightantijoin.svg @@ -1,5 +1,5 @@ - + diff --git a/jointures/rightjoin.svg b/jointures/rightjoin.svg index a7dbd43..5658234 100644 --- a/jointures/rightjoin.svg +++ b/jointures/rightjoin.svg @@ -1,5 +1,5 @@ - + diff --git a/json.md b/json.md new file mode 100644 index 0000000..3614305 --- /dev/null +++ b/json.md @@ -0,0 +1,19 @@ +# Données JSON + +PostgreSQL est l’un des premiers SGBD relationnels à avoir intégré un support avancé de JSON. + +Il existe deux types principaux pour stocker du JSON : +- json → stocke du texte JSON brut, sans transformation. +- jsonb → stocke du JSON sous forme binaire, optimisée pour les recherches et comparaisons. + +En pratique, on utilise jsonb presque tout le temps (plus rapide, indexable). + +### Opérateurs principaux + +-> : accès à un objet ou tableau (résultat = JSON/JSONB) + +->> : accès à une valeur texte (résultat = TEXT) + +#> : accès à un chemin (résultat = JSON/JSONB) + +#>> : accès à un chemin (résultat = TEXT)