Adaptations SCD2 — Marketplace multi-vendeurs (C17)
Contexte métier
Le pivot de ShopNow vers un modèle Marketplace nécessite d'intégrer des
vendeurs tiers dans le DWH. La dimension dim_vendor est implémentée
en SCD Type 2 pour conserver l'historique des changements d'attributs
(commission, statut, région) — requis pour les analyses financières et
contractuelles.
Modèle de données implémenté
Colonnes SCD2 de dim_vendor
| Colonne |
Rôle |
vendor_sk |
Surrogate key — immuable, référencée dans les faits |
vendor_id |
Natural key — identifiant source |
valid_from |
Début de validité de la version |
valid_to |
Fin de validité (NULL = version courante) |
is_current |
1 = version active, 0 = historique |
Procédure MERGE SCD2
La procédure sp_merge_dim_vendor
gère automatiquement les trois cas :
| Cas |
Déclencheur |
Action |
| Nouveau vendeur |
vendor_id inconnu |
INSERT version 1 |
| Changement d'attribut tracké |
commission_rate, status, country, region, vendor_name |
Fermeture ancienne version + INSERT nouvelle version |
| Changement mineur |
vendor_email uniquement |
UPDATE sans nouvelle version SCD2 |
Critères C17
| Critère |
Artefact |
Statut |
Modélisation SCD2 dim_vendor |
dim_vendor_create.sql |
[x] Fait |
| Procédure MERGE SCD2 |
dim_vendor_merge.sql + sp_merge_dim_vendor |
[x] Fait |
Nouvelle fact fact_vendor_stock |
fact_vendor_stock.sql + vue vw_vendor_stock_disponible |
[x] Fait |
Enrichissement dim_product |
dim_product_update.sql (vendor_id FK) |
[x] Fait |
| Documentation modélisation |
docs/06_SCD2/modelisation_SCD2.md |
[x] Fait |
| Documentation ETL |
docs/06_SCD2/adaptations_ETL.md |
[x] Fait |
Choix techniques justifiés
| Besoin |
Solution choisie |
Alternative écartée |
Raison |
| Gestion historique vendeurs |
SCD2 (valid_from/to, is_current) |
SCD1 (écrasement) |
Traçabilité contractuelle commission requise |
| ETL vendeurs |
Procédure stockée sp_merge_dim_vendor |
ADF + Databricks |
Volume batch quotidien ne justifie pas ADF |
| Stocks |
fact_vendor_stock insert-only |
Table de staging |
Simplicité + auditabilité horodatée |
Tests en conditions réelles — 2026-03-12
Commande de déploiement
sqlcmd -S sql-server-rg-e6-sbuasa.database.windows.net \
-U sqladmin -P '***' -d dwh-shopnow \
-i sql/scd2/dim_vendor_create.sql -C
# → (4 rows affected) — 4 vendeurs insérés
sqlcmd ... -i sql/scd2/dim_vendor_merge.sql -C
# → SCD2 — nouvelle version créée pour : V001
# → INSERT — nouveau vendeur : V005
sqlcmd ... -i sql/scd2/fact_vendor_stock.sql -C
# → (25 rows affected) — stocks initiaux 5 vendeurs × 5 produits
sqlcmd ... -i sql/scd2/dim_product_update.sql -C
# → (972 rows affected) — produits assignés aux vendeurs
SCD2 en action — V001 commission 12.50 → 14.00
vendor_sk vendor_id vendor_name commission_rate valid_from valid_to is_current
1 V001 TechGadgets SAS 12.50 2026-03-12 12:40:56.203 2026-03-12 12:41:48.559 0
5 V001 TechGadgets SAS 14.00 2026-03-12 12:41:48.559 NULL 1
Ancienne version fermée (valid_to renseigné, is_current=0), nouvelle version active (is_current=1).
Résultats dim_product enrichi
| Métrique |
Valeur |
| Produits total |
972 |
| Produits sans vendeur |
0 |
| V001 TechGadgets (Electronics + défaut) |
587 |
| V002 ModaStyle (Clothing) |
195 |
| V003 HomeDecor (Home) |
190 |
Vue vw_vendor_stock_disponible
vendor_id vendor_name product_name quantity_available stock_net
V001 TechGadgets SAS Persevering stable alliance 85 80
V001 TechGadgets SAS Universal actuating Local Area... 495 482
V002 ModaStyle GmbH Persevering stable alliance 24 14
...
(25 lignes — 5 vendeurs actifs × 5 produits)
Requête pour accéder à la version courante :
SELECT * FROM dbo.dim_vendor WHERE is_current = 1;
Requête pour l'historique complet :
SELECT vendor_id, commission_rate, valid_from, valid_to, is_current
FROM dbo.dim_vendor WHERE vendor_id = 'V001' ORDER BY valid_from;