Aller au contenu

B2 - Entrepôt de Données & Référentiels

Compétence C6 : Définir les données de référence à partir des données utilisées pour créer un référentiel afin d'assurer la mise à disposition de données cohérentes. Compétence C7 : Créer un entrepôt unique à partir du référentiel pour centraliser les informations stratégiques et répondre rapidement aux besoins métiers.


1. Entrepôt unique : PostgreSQL 15

Paramètre Valeur
SGBD PostgreSQL 15 + PostGIS
Schéma v3.0 normalisé 3NF
Tables 17
Lignes totales ~21 000
Infrastructure Docker Compose
ORM SQLAlchemy 2.x
Migrations Alembic (4 versions)

2. MLD (v3.0)

Diagramme Relationnel

erDiagram
    region ||--o{ departement : "contient"
    departement ||--o{ canton : "contient"
    departement ||--o{ commune : "contient"
    commune ||--o{ arrondissement : "contient"
    commune ||--o{ bureau_vote : "contient"
    arrondissement ||--o{ bureau_vote : "optionnel"

    type_election ||--o{ election : "catégorise"
    election ||--o{ election_territoire : "déclare"
    election_territoire ||--o{ resultat_participation : "mesure"
    election_territoire ||--o{ resultat_candidat : "mesure"

    candidat ||--o{ candidat_parti : "affilié"
    parti ||--o{ candidat_parti : "accueille"
    candidat ||--o{ resultat_candidat : "obtient"
    parti ||--o| parti : "succède"

    type_indicateur ||--o{ indicateur : "catégorise"

    region {
        varchar id_region PK
        varchar nom_region
        integer population
    }

    departement {
        varchar id_departement PK
        varchar id_region FK
        varchar nom_departement
        integer population
    }

    commune {
        varchar id_commune PK
        varchar id_departement FK
        varchar code_insee UK
        varchar nom_commune
        integer population
    }

    canton {
        varchar id_canton PK
        varchar id_departement FK
        varchar nom_canton
    }

    arrondissement {
        varchar id_arrondissement PK
        varchar id_commune FK
        varchar nom_arrondissement
    }

    bureau_vote {
        varchar id_bureau PK
        varchar id_commune FK
        varchar id_arrondissement FK
        varchar code_bureau
    }

    type_election {
        serial id_type_election PK
        varchar code_type UK
        varchar nom_type
    }

    election {
        serial id_election PK
        integer id_type_election FK
        integer annee
        date date_tour1
        date date_tour2
    }

    election_territoire {
        serial id_election_territoire PK
        integer id_election FK
        varchar id_territoire
        varchar type_territoire
    }

    resultat_participation {
        bigserial id_resultat_part PK
        integer id_election FK
        varchar id_territoire
        varchar type_territoire
        integer tour
        integer nombre_inscrits
        integer nombre_votants
        integer nombre_exprimes
    }

    resultat_candidat {
        bigserial id_resultat_cand PK
        integer id_election FK
        integer id_candidat FK
        varchar id_territoire
        varchar type_territoire
        integer tour
        integer nombre_voix
    }

    candidat {
        serial id_candidat PK
        varchar nom
        varchar prenom
        varchar nom_complet
    }

    parti {
        serial id_parti PK
        varchar code_parti UK
        varchar nom_officiel
        varchar classification_ideologique
    }

    candidat_parti {
        serial id_affiliation PK
        integer id_candidat FK
        integer id_parti FK
        date date_debut
    }

    type_indicateur {
        serial id_type PK
        varchar code_type UK
        varchar categorie
        varchar nom_affichage
    }

    indicateur {
        bigserial id_indicateur PK
        varchar id_territoire
        varchar type_territoire
        integer id_type FK
        integer annee
        decimal valeur_numerique
    }

    prediction {
        bigserial id_prediction PK
        varchar id_territoire
        varchar type_territoire
        varchar candidat
        integer tour
        decimal pourcentage_predit
        varchar modele_utilise
    }

3. Référentiels définis

Référentiel géographique

Table Clé Exemples Lignes
region id_region Nouvelle-Aquitaine 1
departement id_departement Gironde (33) 1
commune id_commune Bordeaux (33063), Mérignac (33281)... 534

Référentiel candidats & partis

Table Clé Exemples Lignes
candidat id_candidat Macron, Le Pen, Mélenchon... 16
parti id_parti RE, RN, LFI... 15
candidat_parti (id_candidat, id_parti) Association candidat-parti 25

Référentiel élections

Table Clé Exemples Lignes
type_election id_type Présidentielle 1
election id_election 2017, 2022 2

Référentiel indicateurs

Table Clé Exemples Lignes
type_indicateur id_type Criminalité totale, Vols, Atteintes... 5

4. Contraintes d'intégrité

Type Nombre Exemple
Clés primaires 17 commune.id_commune
Clés étrangères 12 commune.id_departement → departement
UNIQUE 8 (id_territoire, candidat, tour, annee, version)
CHECK 10 pourcentage BETWEEN 0 AND 100
NOT NULL ~50 Colonnes obligatoires

5. Historique des versions

Version Date Changement
v1.0 2026-02-09 Schéma initial (8 tables)
v2.0 2026-02-10 Séparation participation/résultats
v3.0 2026-02-12 Système polymorphe, 17 tables, table prediction

6. Dictionnaire de données

Extrait pour les tables clés :

Table.Colonne Type Description
commune.id_commune VARCHAR(5) Code INSEE (ex: 33063)
commune.population INTEGER Population municipale
resultat_candidat.pourcentage_voix_exprimes NUMERIC(5,2) % voix (0-100)
prediction.pourcentage_predit NUMERIC(5,2) % prédit ML (0-100)
prediction.intervalle_confiance_inf NUMERIC(5,2) Borne inf IC 95%
prediction.metriques_modele JSONB {r2, mae, rmse, feature_importance}

Fichiers de référence : - Modèles ORM : src/database/models/ - MCD : docs/02-architecture/database/01-mcd.md - MLD : docs/02-architecture/database/02-mld.md - Dictionnaire complet : docs/02-architecture/database/03-dictionnaire-donnees.md - Règles de gestion : docs/02-architecture/database/04-regles-gestion.md - Contraintes : docs/02-architecture/database/05-contraintes-integrite.md