diff --git a/Arbres.md b/Arbres.md index afe8a8d..c70eed7 100644 --- a/Arbres.md +++ b/Arbres.md @@ -27,12 +27,12 @@ CREATE TABLE familles ( ``` ``` -Électronique - ├── Téléphones - │ ├── Smartphones - │ └── Téléphones fixes - └── Télévisions - └── Accessoires TV +Primeur + ├── Légumes + │ ├── Racines + │ └── Feuilles + └── Fruits + └── Pépins ``` ### Lire la famille de premier niveau @@ -109,8 +109,8 @@ ORDER BY niveau DESC; -- de la racine vers le nœud Récupérer la hiérarchie dans une chaine de caractères formatée. ```sql -SELECT string_agg(nom, ' > ' ORDER BY niveau DESC) AS fil_ariane -FROM ancetres; +SELECT string_agg(famille, ' > ' ORDER BY niveau DESC) AS fil_ariane +FROM ancetre; ``` ## représentation intervallaire @@ -173,7 +173,6 @@ L’extension introduit le type ltree, qui est une chaîne de labels séparés p Il représente le chemin complet depuis la racine, ce qui simplifie toutes les opérations sur l’arbre. - ### Trouver toutes les familles descendantes d’une catégorie Utilisation d'un nouvel opérateur `<@` diff --git a/Calculated.md b/Calculated.md index 70a3e81..01db55e 100644 --- a/Calculated.md +++ b/Calculated.md @@ -1,27 +1,5 @@ # Calcul -## Volatilité - -> La volatilité indique au moteur postgreSQL à quel point le résultat de la fonction dépend de l’état de la base ou du contexte. Il existe 3 niveaux. - -#### IMMUTABLE - -Le résultat **ne change jamais** pour les mêmes arguments. - -Exemple : abs(-5) donne toujours 5, peu importe quand ou où la fonction est exécutée. - -Utilisable dans : index, colonnes calculées, contraintes CHECK, etc. - -#### STABLE - -Le résultat ne change pas pendant une requête donnée, mais **peut changer entre deux requêtes**. - -La fonction `ST_Length(geom)` est STABLE car pour une même géométrie, la longueur est toujours la même, MAIS cela dépend de paramètres de la session (SRID de référence). - -#### 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. @@ -99,3 +77,26 @@ Un trigger repose sur deux éléments : 1. Une fonction (en PL/pgSQL ou un autre langage supporté) qui contient le code à exécuter. 2. Le trigger lui-même, qui associe cette fonction à un événement (INSERT, UPDATE, DELETE…). + + +## Volatilité + +> La volatilité indique au moteur postgreSQL à quel point le résultat de la fonction dépend de l’état de la base ou du contexte. Il existe 3 niveaux. + +#### IMMUTABLE + +Le résultat **ne change jamais** pour les mêmes arguments. + +Exemple : abs(-5) donne toujours 5, peu importe quand ou où la fonction est exécutée. + +Utilisable dans : index, colonnes calculées, contraintes CHECK, etc. + +#### STABLE + +Le résultat ne change pas pendant une requête donnée, mais **peut changer entre deux requêtes**. + +La fonction `ST_Length(geom)` est STABLE car pour une même géométrie, la longueur est toujours la même, MAIS cela dépend de paramètres de la session (SRID de référence). + +#### 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. diff --git a/Home.md b/Home.md index 35259d9..03e2482 100644 --- a/Home.md +++ b/Home.md @@ -10,9 +10,10 @@ - [Colonnes calculées](Calculated.md) - [Business Intelligence](datawarehouse.md) - [Les modèles de données](models.md) -- [Intervalles](intervalle.md) + - [Exploration des données](exploration.md) - [Arbres](Arbres.md) - [Données spatiales](Spatial.md) +- [Intervalles](intervalle.md) - [Données JSON](json.md) ## Exercices diff --git a/Spatial.md b/Spatial.md index f105259..db4f6a7 100644 --- a/Spatial.md +++ b/Spatial.md @@ -99,7 +99,6 @@ Le type `LINESTRING` représente une ligne constituée de points. select GeomFromText('LINESTRING(3 5,6 7,8 2,12 1)'); ``` - ### Polygone Le type `POLYGON` est une ligne fermée qui représente une surface. Les coordonnées du dernier point sont égales aux coordonnées du premier point. Chaque point est séparé par une virgule (attention au format décimal français qui utilise aussi la virgule) et les coordonnées sont séparées par des espaces. diff --git a/datawarehouse.md b/datawarehouse.md index 9e87a88..b65cf46 100644 --- a/datawarehouse.md +++ b/datawarehouse.md @@ -123,4 +123,5 @@ Les tables de dimensions apportent le **contexte descriptif** nécessaire pour a - **Stables :** moins fréquemment mises à jour que les tables de faits. + Apache Parquet diff --git a/exploration.md b/exploration.md new file mode 100644 index 0000000..35ac61d --- /dev/null +++ b/exploration.md @@ -0,0 +1,32 @@ +# Exploration des données + +## Drill down + +L'approfondissemnt permet aux utilisateurs de voir des niveaux plus bas de données hiérarchiques dans un seul rapport. Il leur permet de passer d'un niveau plus généralisé à un niveau plus approfondi tout en gardant la même logique d’analyse. + +Par exemple, imaginez un tableau de bord qui montre les ventes par continent. Il pourrait également être prévu pour afficher les ventes par pays, état, ville, quartier, etc. + +**Exercice :** Effectuer un drill down sur le code postal. + +```sql +WITH ventes_mensuelles AS ( + SELECT + annee, + mois, + codepostal, + famille_code, + SUM(vente) AS total_ventes + FROM ventes_analyse + WHERE famille_code = '02CARO' + GROUP BY annee, mois, codepostal, famille_code +) +SELECT + annee, + mois, + codepostal, + total_ventes, + LAG(total_ventes, 1) OVER (PARTITION BY codepostal ORDER BY annee, mois) AS ventes_mois_prec, + LAG(total_ventes, 12) OVER (PARTITION BY codepostal ORDER BY annee, mois) AS ventes_an_dernier +FROM ventes_mensuelles +ORDER BY codepostal, annee, mois; +``` diff --git a/modeles_transactionnels.md b/modeles_transactionnels.md index 6831b61..7c1a1dc 100644 --- a/modeles_transactionnels.md +++ b/modeles_transactionnels.md @@ -1,6 +1,4 @@ ---- -title: Les modèles transactionnels ---- +# Les modèles transactionnels ## modèle ACID diff --git a/models.md b/models.md index 35f931e..0c9ffed 100644 --- a/models.md +++ b/models.md @@ -1,6 +1,5 @@ # Modèles de données - Il existe deux (trois) modèles principaux, le modèle étoile (star) et le modèle flocon (snowflake). Ils sont utilisés dans les entrepôts de données pour organiser les données de manière à **faciliter** les analyses multidimensionnelles, particulièrement dans les systèmes de Business Intelligence (BI). Ces modèles se distinguent par la manière dont les tables de faits et les tables de dimensions sont structurées et reliées entre elles. ## Modèle étoile (Star Schema) @@ -13,6 +12,8 @@ Le modèle en étoile est une structure simple où une table de faits est relié - **Accès rapide** : Comme les tables de dimensions sont dénormalisées (les données sont centralisées et répétées), les requêtes sont plus simples et plus rapides à exécuter. Il y a moins de jointures à réaliser - **Lisibilité** : Le modèle est simple à comprendre et à concevoir, car il n'y a qu'une seule relation directe entre la table de faits et chaque table de dimension. Idéal pour des besoins analytiques simples avec de grandes quantités de données. +![étoile](star.svg) + ## Modèle flocon (Snowflake Schema) Le modèle flocon est une extension du modèle étoile. Dans ce modèle, certaines ou toutes les tables de dimensions sont **normalisées**, c’est-à-dire qu'elles sont subdivisées en plusieurs sous-tables pour éliminer les redondances. Le modèle est appelé "flocon" parce que la structure résultante a une forme plus complexe, semblable à celle d'un flocon de neige. @@ -23,7 +24,7 @@ Le modèle flocon est une extension du modèle étoile. Dans ce modèle, certain - **Complexité** : Les requêtes sont plus complexes à écrire et prennent plus de temps à s'exécuter car elles impliquent plusieurs jointures entre les tables de dimensions et sous-tables. - **Réduction de la redondance** : Le modèle flocon réduit la redondance des données dans les dimensions. Les tables étant normalisées, les données redondantes sont éliminées, ce qui réduit la taille des tables. -#### Inconvénients +### Inconvénients - **Requêtes plus lentes** : Le modèle flocon nécessite des jointures supplémentaires entre les tables, ce qui peut ralentir l’exécution des requêtes. - **Complexité accrue** : La structure est plus complexe à comprendre et à concevoir par rapport au modèle étoile. @@ -32,12 +33,38 @@ Le modèle flocon est une extension du modèle étoile. Dans ce modèle, certain Tout est regroupé dans une seule table large. -Exemple : une seule table qui contient directement Produit, Sous-famille, Famille, Client, Date, etc. +### Avantages -Avantage : très simple pour les outils BI et le reporting. +Très simple pour les outils BI et le reporting. Requêtes simplifiées -#### Inconvénients +### Inconvénients - beaucoup de redondance, - consommation d’espace, - difficile à maintenir. + + +**Exercice :** A l'aide d'une vue matérialisée créer une table aplatie. Les dimensions d'analyse sont : l'année, le mois, la semaine, le code famille de l'article, le code postal, l'âge et le genre de l'adhérent. Mon fait est la vente (soit le prix unitaire multiplié par la quantité). + +```sql +CREATE MATERIALIZED VIEW ventes_analyse AS +SELECT + -- Dimensions temporelles + EXTRACT(YEAR FROM t.date_ticket)::int AS annee, + EXTRACT(MONTH FROM t.date_ticket)::int AS mois, + EXTRACT(WEEK FROM t.date_ticket)::int AS semaine, + -- Dimension article + a.famille_code, + -- Dimension adhérent + ad.codepostal, + date_part('year', age(t.date_ticket, ad.naissance))::int AS age, + ad.genre, + -- Fait + ROUND(l.prix_unitaire * l.quantite, 2) AS vente +FROM ligne l +JOIN ticket t ON l.ticket_id = t.id +JOIN article a ON l.article_code = a.code +JOIN adherent ad ON t.adherent_id = ad.id; +``` + +Attention : L'age à prendre en compte est celui au moment de la vente. Pas l'âge d'aujourd'hui. diff --git a/sousrequete.md b/sousrequete.md index efbf5ef..f04a159 100644 --- a/sousrequete.md +++ b/sousrequete.md @@ -39,7 +39,6 @@ WHERE nom_colonne = ( ) ``` - **Exercice :** Sélectionner les articles dont le prix est supérieur à la moyenne générale des prix des articles. Dans un langage procédural on utiliserait deux étapes pour obtenir le résultat. Première étape calculer la moyenne des prix diff --git a/star.svg b/star.svg new file mode 100644 index 0000000..6566ad7 --- /dev/null +++ b/star.svg @@ -0,0 +1,60 @@ + + + + + + + + + + + Dimension + + Dimension + + Dimension + + Dimension + + Dimension + + + + + + + Faits / Mesures +