Data Model SCD Type 2, Vault, Kimball, Inmon

SCD Type 2, 6NF/7NF, Data Vault

SCD Type 2: One big table, all attributes together, duplicates on change.

 ProductID | Name    | Category    | Price | ValidFrom  | ValidTo
-----------+---------+-------------+-------+------------+----------
 456       | iPhone9 | Electronics | 1000  | 2020       | 2021
 456       | iPhone9 | Electronics | 900   | 2021       | 2022
 456       | iPhone9 | Computers   | 900   | 2022       | NULL


6NF/7NF:   Each table per attribute 

 ProductID | Name    | ValidFrom  | ValidTo
-----------+---------+------------+----------
 456       | iPhone9 | 2020       | NULL


 ProductID | Price | ValidFrom  | ValidTo
-----------+-------+------------+----------
 456       | 1000  | 2020       | 2021
 456       | 900   | 2021       | NULL


 ProductID | Category    | ValidFrom  | ValidTo
-----------+-------------+------------+----------
 456       | Electronics | 2020       | 2022
 456       | Computers   | 2022       | NULL


Data Vault: Source-based grouping 

 ProductID | BusinessKey
-----------+-------------
 456       | iPhone9

 ProductID | Category    | Price | Source           | LoadDate
-----------+-------------+-------+------------------+----------
 456       | Electronics | 1000  | Dell ERP         | 2020
 456       | Electronics | 900   | Distributor Feed | 2021
 456       | Electronics | 900   | Dell ERP         | 2021
 456       | Computers   | 900   | Dell ERP         | 2022

Inmon vs Kimball

Inmon builds Kimball-like views in Data Mart from core 3NF EDW

create view SalesMart.DimProduct as
select 
    md5_hash(p.ProductID || ph.EffectiveDate) AS ProductSK, 
    *
from CoreEDW.Product p
join CoreEDW.ProductCategory c on p.CategoryID = c.CategoryID
join CoreEDW.ProductPriceHistory ph on p.ProductID = ph.ProductID;

Last modified on 2026-01-22