offdataai
Manufacturing & Industrial · data model template

Construction EDW data model

Data Vault 2.0 raw vault for construction: hubs (project/contractor/site/contract/work_package), links (project-contractor, project-site, contract-project, work-package cost), and satellites (project, contractor, site, financials details + contract-terms and work-package-progress effectivity satellites). Hash keys and load metadata are generated by the DDL layer.

Construction enterprise data warehouse modeled as a Data Vault 2.0 raw vault: project, contractor, site, contract, and work-package hubs; project-contractor / project-site / contract-project links; a non-historized work-package-cost link carrying committed and actual cost; and descriptive, effectivity (contract terms, work-package progress), and earned-value financials satellites — built to integrate ERP, project controls, field, and contract-management systems with full historization for cost control and change-order audit. It is a Data Vault 2.0 raw vault: hubs for business keys, links for relationships and satellites for descriptive history, with hash keys and hash diffs generated in the DDL.

Data Vault 2.0Manufacturing & IndustrialSOXISO-19650OSHA
15
tables
102
columns
14
relationships
2
PII columns

Opening the template creates a project with the ERD, platform-native DDL, a dbt project and documentation already generated (recommended platform: Snowflake). Edit it in plain English or on the canvas, then ship it to any supported warehouse.

Subject areas

hubslinkssatellites

Design decisions

  • Hubs isolate construction business keys

    Projects, contracts, contractors, and sites are mastered in separate ERP, contract-management, and project-controls systems; isolating their keys in hubs lets each feed land independently as scope, subcontracts, and change orders evolve over a multi-year build.

  • Non-historized work-package-cost link

    Cost postings against a work package are immutable accounting events, so the cost link is insert-only and carries committed and actual cost directly with no satellite.

  • Effectivity satellites on contract terms and progress

    Change orders revise contract terms and work-package progress moves through states over time; effectivity satellites record the valid period of each version for as-of cost-to-complete and claims defense.

  • Financials split into its own satellite

    Earned-value metrics (EAC, CPI, SPI) refresh every reporting cycle, far faster than project master data; a separate high-rate-of-change satellite keeps cost history compact and loads efficient.

  • Auditability drives Data Vault in construction

    Load_date + record_source on every row give queryable lineage for change-order audits, progress-claim disputes, and ISO-19650 / SOX cost reporting without scraping ERP and project-controls logs.

Tables in the Construction EDW model

Every table with its grain, columns, types and keys. PK marks a primary key, BK a business key and PII a column classified as personal data, which gets a masking strategy by default.

Hubs (5)

hub_project

Grain: one row per unique hub_project business key

ColumnTypeKeys
project_codevarcharBK
load_datetimestamp
record_sourcevarchar

hub_contractor

Grain: one row per unique hub_contractor business key

ColumnTypeKeys
contractor_idvarcharBK
load_datetimestamp
record_sourcevarchar

hub_site

Grain: one row per unique hub_site business key

ColumnTypeKeys
site_codevarcharBK
load_datetimestamp
record_sourcevarchar

hub_contract

Grain: one row per unique hub_contract business key

ColumnTypeKeys
contract_numbervarcharBK
load_datetimestamp
record_sourcevarchar

hub_work_package

Grain: one row per unique hub_work_package business key

ColumnTypeKeys
work_package_idvarcharBK
load_datetimestamp
record_sourcevarchar

Links (4)

lnk_project_contractor

Grain: one row per lnk_project_contractor relationship

Which contractor is engaged on which project.

ColumnTypeKeys
project_hkbinary
contractor_hkbinary
load_datetimestamp
record_sourcevarchar

lnk_project_site

Grain: one row per lnk_project_site relationship

Which site a project is executed at.

ColumnTypeKeys
project_hkbinary
site_hkbinary
load_datetimestamp
record_sourcevarchar

lnk_contract_project

Grain: one row per lnk_contract_project relationship

Which project a contract governs.

ColumnTypeKeys
contract_hkbinary
project_hkbinary
load_datetimestamp
record_sourcevarchar

lnk_work_package_cost

Grain: one row per work-package cost posting (non-historized link)

Transactional (non-historized) link — insert-only cost-posting events.

ColumnTypeKeys
work_package_hkbinary
project_hkbinary
cost_event_idvarcharBK
cost_tstimestamp
cost_typevarchar
committed_costdecimal
actual_costdecimal
quantitydecimal
load_datetimestamp
record_sourcevarchar

Satellites (6)

sat_project_details

Grain: one row per project_hk per change

Project descriptive history.

ColumnTypeKeys
project_hkbinaryPK
load_datetimestampPK
project_namevarchar
project_typevarchar
project_managervarcharPII
planned_startdate
planned_finishdate
contract_valuedecimal
currencyvarchar
load_end_datetimestamp
record_sourcevarchar

sat_contractor_details

Grain: one row per contractor_hk per change

Contractor descriptive history.

ColumnTypeKeys
contractor_hkbinaryPK
load_datetimestampPK
contractor_namevarchar
tradevarchar
license_numbervarchar
prequalification_statusvarchar
safety_ratingvarchar
contact_emailvarcharPII
load_end_datetimestamp
record_sourcevarchar

sat_site_details

Grain: one row per site_hk per change

Site descriptive history.

ColumnTypeKeys
site_hkbinaryPK
load_datetimestampPK
site_namevarchar
addressvarchar
cityvarchar
countryvarchar
latitudedecimal
longitudedecimal
zoning_typevarchar
load_end_datetimestamp
record_sourcevarchar

sat_contract_terms

Grain: one row per contract per terms effectivity change

Effectivity satellite tracking the valid period of each contract term set.

ColumnTypeKeys
contract_hkbinaryPK
load_datetimestampPK
contract_typevarchar
contract_amountdecimal
retention_pctdecimal
payment_termsvarchar
effective_fromdate
effective_todate
is_activeboolean
load_end_datetimestamp
record_sourcevarchar

sat_work_package_progress

Grain: one row per work package per progress effectivity change

Effectivity satellite tracking the valid period of each work-package progress state.

ColumnTypeKeys
work_package_hkbinaryPK
load_datetimestampPK
work_package_namevarchar
pct_completedecimal
planned_quantitydecimal
earned_quantitydecimal
statusvarchar
effective_fromtimestamp
effective_totimestamp
is_activeboolean
load_end_datetimestamp
record_sourcevarchar

sat_project_financials

Grain: one row per project per financials reporting cycle (high-rate-of-change satellite)

Project earned-value financials satellite split out for its reporting cadence.

ColumnTypeKeys
project_hkbinaryPK
load_datetimestampPK
budget_at_completiondecimal
estimate_at_completiondecimal
earned_valuedecimal
actual_cost_to_datedecimal
cost_performance_indexdecimal
schedule_performance_indexdecimal
load_end_datetimestamp
record_sourcevarchar

Relationships

Each relationship is a foreign key on the first table referencing the second.

  • lnk_project_contractor.project_hk → hub_project (many-to-one)
  • lnk_project_contractor.contractor_hk → hub_contractor (many-to-one)
  • lnk_project_site.project_hk → hub_project (many-to-one)
  • lnk_project_site.site_hk → hub_site (many-to-one)
  • lnk_contract_project.contract_hk → hub_contract (many-to-one)
  • lnk_contract_project.project_hk → hub_project (many-to-one)
  • lnk_work_package_cost.work_package_hk → hub_work_package (many-to-one)
  • lnk_work_package_cost.project_hk → hub_project (many-to-one)
  • sat_project_details.project_hk → hub_project (many-to-one)
  • sat_contractor_details.contractor_hk → hub_contractor (many-to-one)
  • sat_site_details.site_hk → hub_site (many-to-one)
  • sat_contract_terms.contract_hk → hub_contract (many-to-one)
  • sat_work_package_progress.work_package_hk → hub_work_package (many-to-one)
  • sat_project_financials.project_hk → hub_project (many-to-one)

Related templates

All templates →
Start for $1

From requirements to AI-ready context, in one platform.

Describe your business in a conversation, start from a template or connect your own database. Your first model is ready in minutes.

Get startedBook a demo

Plans from $1/month · cancel any time