Pour introduire des clés artificielles pour identifier les dimensions :
Dans la zone de transformation :
ajouter à chaque dimension un attribut pk
ajouter une méthode getPk()
qui renvoie pk
(supprimer la méthode qui renvoyait initialement la clé naturelle si elle n'est plus nécessaire par ailleurs)
À chaque ajout d'un nouvel enregistrement dans une dimension
générer une clé artificielle dans pk
(à l'aide d'une séquence par exemple)
Lors de l'ajout des dimensions dans le data warehouse
utiliser getPk()
pour identifier les enregistrements
Lors de l'ajout des faits, il faut substituer les clés
joindre les faits avec les dimensions
appeler les méthodes getPk()
de chaque dimension
INSERT INTO dw_facts
SELECT d1.pk(), d2.pk()
FROM t_fact f, t_dim1 d1, t_dim2 d2
WHERE f.a=d1.a AND f.b=d1.b
Il faut mémoriser la correspondance entre la clé identifiant la dimension dans le système transactionnel et la clé artificielle dans le data warehouse.
Pour cela :
soit les tables sont persistantes dans la zone T
soit les clés du système transactionnel doivent être conservées dans le DW
Les jointures à présent nécessaires diminuent les performances de chargement
Une indexation adéquate est requise
Les faits n'ont pas besoin d'être identifiés.
Sous Oracle en RO, il est possible d'utiliser les OID à la place de clés artificielles.
Le problème sera que les OID ne sont connus qu'après insertion dans la DB, ils ne peuvent être créés dans la BDT puis transféré dans le DW.
Il faut déclarer les tables du DW en mode RO, en conservant les clés d'origine
Puis substituer les clés étrangères par des REF dans la table des faits, en faisant la jointure entre la table des faits de la BDT avec les dimensions du DW