Aller au contenu

Modélisation SCD Type 2 — dim_vendor

Contexte

Le pivot de ShopNow vers un modèle Marketplace multi-vendeurs (C17) nécessite l'introduction d'une nouvelle dimension dim_vendor avec gestion historique des changements d'attributs — SCD Type 2 (Slowly Changing Dimension).

Principe du SCD2

Un SCD2 conserve toutes les versions d'un enregistrement dans le temps. Chaque changement d'attribut tracké crée une nouvelle ligne, l'ancienne étant "fermée" avec une date de fin.

vendor_id  vendor_name       commission_rate  valid_from   valid_to     is_current
V001       TechGadgets SAS   12.50            2026-01-01   2026-03-12   0
V001       TechGadgets SAS   14.00            2026-03-12   NULL         1

La clé de substitution (vendor_sk) est immuable — c'est elle qui est référencée dans les tables de faits.

Modèle de données C17

erDiagram
    dim_vendor {
        int vendor_sk PK
        nvarchar vendor_id
        nvarchar vendor_name
        nvarchar country
        nvarchar region
        nvarchar status
        decimal commission_rate
        datetime2 valid_from
        datetime2 valid_to
        bit is_current
    }
    dim_product {
        int product_id PK
        nvarchar name
        nvarchar category
        nvarchar vendor_id FK
    }
    fact_vendor_stock {
        int stock_id PK
        int vendor_sk FK
        int product_id FK
        int quantity_available
        int quantity_reserved
        decimal unit_cost
        datetime2 stock_timestamp
    }
    fact_order {
        int order_id PK
        int product_id FK
        int customer_id FK
        int quantity
        decimal unit_price
        datetime2 order_timestamp
    }
    dim_vendor ||--o{ fact_vendor_stock : "vendor_sk"
    dim_product ||--o{ fact_vendor_stock : "product_id"
    dim_product ||--o{ fact_order : "product_id"

Attributs trackés vs non trackés

Attribut Tracké SCD2 Raison
commission_rate Oui Impact financier — historique requis
status Oui Suspension/réactivation = événement métier
country / region Oui Changement de périmètre géographique
vendor_name Oui Renommage = changement d'entité
vendor_email Non Contact opérationnel, pas d'impact analytique

Scripts d'implémentation

Script Rôle
dim_vendor_create.sql Création table + index + données démo
dim_vendor_merge.sql Procédure sp_merge_dim_vendor — logique SCD2
fact_vendor_stock.sql Table de faits stocks + vue analytique
dim_product_update.sql Enrichissement dim_product (vendor_id FK)

Requête type — analyse historique SCD2

-- Historique complet des changements de commission pour un vendeur
SELECT
    vendor_id,
    vendor_name,
    commission_rate,
    valid_from,
    ISNULL(CONVERT(NVARCHAR(20), valid_to), 'en cours') AS valid_to,
    is_current
FROM dbo.dim_vendor
WHERE vendor_id = 'V001'
ORDER BY valid_from;