„Schimbările de tip 2 într-o dimensiune cu schimbare lentă adaugă un rând nou în dimensiune, cu valorile actualizate ale atributelor. Asta cere generalizarea cheii primare a dimensiunii dincolo de cheia naturală sau durabilă, pentru că vor exista, potențial, mai multe rânduri care descriu fiecare membru.”Ralph Kimball, Margy Ross · The Data Warehouse Toolkit · 2013 · Kimball Group, Dimensional Modeling Techniques — Type 2: Add New Row (The Data Warehouse Toolkit, ed. a 3-a, cap. 5)
Tip 1 suprascrie, tip 2 adaugă un rând cu perioadă, tip 3 ține o coloană cu valoarea anterioară.
Un client se mută din Cluj în Iași. Ce faci cu rândul lui din dimensiunea Client? Tip 1: suprascrii. Simplu, fără istoric — iar vânzările din 2023 apar brusc în Iași, deci rapoartele vechi se schimbă. Bun pentru corectarea greșelilor și pentru atribute fără valoare istorică. Tip 2: adaugi un rând nou, cu o cheie surogat nouă, cu valid_from și valid_to, și marchezi care e curent. Faptele vechi rămân legate de versiunea de atunci, faptele noi de versiunea nouă; raportul din 2023 rămâne exact cum era. Tip 3: păstrezi o coloană „valoarea anterioară” — un singur pas de istoric, util la realinieri de teritorii de vânzări, unde vrei să vezi ambele împărțiri deodată. Alegerea se face per atribut, nu per tabel: aceeași dimensiune poate avea coloane tip 1 și tip 2. Două capcane. Prima: join-ul faptelor pe cheia naturală în loc de surogat, care dublează rândurile de câte versiuni are clientul. A doua: un „update” de tip 1 rulat din greșeală pe o dimensiune tip 2, care rescrie toate versiunile deodată și șterge istoricul fără să dea nicio eroare.
De ce contează Fără tip 2, „vânzări pe județ în 2023” dă alt răspuns în fiecare an, pe măsură ce clienții se mută. Istoricul trebuie ținut în dimensiune, nu ghicit din fapte.