What’s actually slowing this PC down?

Pick the symptom - the matching free tool is one click away.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Some links on this page are affiliate links: if you buy through them we may earn a commission, at no extra cost to you.

Modern warehouses and lakehouses do not make data modeling optional. They change where transformations run and how storage and compute are managed, but teams still need clear definitions, reliable relationships, accurate history, and tables people can use. For many organizations, the most practical design is hybrid: standardize source data in staging, integrate it in reusable models, publish dimensional marts for analytics, and add purpose-built wide tables or a Data Vault where the workload justifies them.

The right technique depends on the data, consumers, history requirements, and query patterns—not allegiance to a single methodology. The starting point is a precise statement of what one row represents.

What data modeling means in a modern warehouse

Data modeling is the design of the tables, columns, data types, keys, relationships, grain, aggregation behavior, history, naming, metadata, security boundaries, and transformation dependencies that make data dependable for use. It applies whether the platform is a cloud data warehouse, a lakehouse, or a combination of object storage, SQL transformations, streaming ingestion, and a semantic layer.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A warehouse is not a useful data product merely because it contains copied source tables. Without consistent definitions and documented relationships, two dashboards can report different versions of revenue, customer, or order. Modeling supplies the structure that makes analysis repeatable and understandable.

Three levels of modeling

  • Conceptual: the business entities and processes, such as customers, orders, subscriptions, invoices, and shipments.
  • Logical: the entities’ attributes, relationships, cardinalities, business keys, and normalization decisions, without committing to a particular vendor or storage implementation.
  • Physical: the actual tables and views, data types, materializations, incremental logic, partitioning or clustering, access policies, and platform-specific optimizations.

Skipping conceptual and logical decisions can make the first dashboard faster to deliver, but it often pushes disagreements about definitions and relationships into every downstream report.

Start with grain: what does one row mean?

Grain is the business meaning of one row. A fact table might contain one row per order line, one row per payment, one row per customer per day, or one row per inventory item per warehouse per hour. Write that sentence before choosing measures or joining other tables. If the team cannot agree on the sentence, the table design is not ready.

For example, an order-level amount repeated on every product line will be counted more than once if it is summed after joining to line-level data. Similarly, directly joining order lines to multiple payment records can multiply both sets of rows. Separate facts by grain, or aggregate each input to a common grain before joining.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.
-- Check whether the declared order-line key is unique
select order_id, line_number, count(*) as row_count
from fact_order_line
group by order_id, line_number
having count(*) > 1;

Uniqueness checks are useful, but also reconcile row counts and measures to their sources. A table can have unique keys and still represent the wrong population or omit late-arriving records.

How the main modeling techniques fit together

Source-aligned staging

Staging is the first transformation layer after ingestion. A staging model is generally close to one source table or entity. It can standardize names and types, normalize timestamps and time zones, preserve source keys, decode status codes, retain ingestion metadata, and remove known source artifacts.

Do not deduplicate or reinterpret records unless the business rule is understood. A staging layer should not become an unowned repository of business logic, and unrelated sources should not be joined there simply because they are available. In a common dbt-style project, staging feeds reusable intermediate models, which in turn feed marts; dbt discusses this modular approach in its modeling guidance.

Normalized relational models

Normalization stores entities in separate related tables to reduce duplication and make relationships explicit. It is useful for an integration layer, for entities that change independently, when several applications need a reusable foundation, or where source fidelity and integrity matter.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The cost is usually paid in joins and usability: analysts may need to understand many tables to answer a simple question, and BI semantic models can be harder to configure. Normalization is not obsolete; it is simply not always the most convenient final shape for business reporting. A normalized core can feed a flatter, consumer-oriented layer.

Dimensional modeling and star schemas

Dimensional modeling organizes analytics around facts—events, measurements, or snapshots—and dimensions—descriptive context such as customer, product, date, geography, or organization. In a star schema, a fact table sits at the center and joins directly to dimensions:

dim_customer   dim_product   dim_date   dim_region
                   |           |          /
                  fact_order_line

A star schema is often a strong default for business-facing analytics because its join paths are visible, its tables are familiar to analysts, and dimensions can be reused across reports and business processes. Microsoft recommends star schemas for analytical workloads in Fabric Warehouse; that is platform-specific guidance, but the usability principles are broadly relevant. See Microsoft’s dimensional-modeling overview and Kimball’s dimensional-modeling techniques.

A star schema still requires disciplined design. Poorly defined grain, ambiguous measures, or incorrect many-to-many joins can make a seemingly simple model produce misleading totals.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Snowflake schemas

A snowflake schema normalizes part of a dimension into additional tables—for example, a product dimension joined to subcategory and category tables. This can be appropriate when hierarchy entities have independent history or ownership, the dimension is unusually large, or duplication has a material cost. For many analyst-facing models, a flattened dimension is easier to use. A practical compromise is to keep normalized internal structures and expose a denormalized view to consumers. Microsoft describes these dimension trade-offs in its dimension-table guidance.

Data Vault

Data Vault is commonly used for integration and historical record-keeping rather than as the final schema for casual analysis. Its core structures are hubs for business keys, links for relationships among keys, and satellites for descriptive attributes and their history.

It can suit environments with many independently changing sources, substantial audit and lineage needs, and a team able to manage its added structures and metadata. It can also mean more tables, joins, and downstream modeling work. Plan a business-facing dimensional layer or marts when analysts need simpler tables. Data Vault is not a universal successor to dimensional modeling; the approaches solve different problems. dbt’s overview discusses Data Vault alongside relational and dimensional approaches: data-modeling techniques.

Wide tables and one-big-table designs

A wide table combines attributes and measures into a single serving structure. It can be useful for a stable dashboard, a machine-learning feature set, a known repeated join pattern, or a tool that works best with one denormalized table. It is not inherently a bad design.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

The risk is an accidental wide table that combines order, payment, shipment, customer, and product records despite their different grains. Such a table can duplicate facts, obscure why values are null, make history difficult, and spread metric definitions across downstream consumers. A purpose-built wide table should have one explicit grain, a known audience, documented measures, and a clear refresh and history policy.

Consideration Star schema Wide serving table
Reuse across reports Usually strong through shared dimensions and facts Often limited to its intended use
Joins Some predictable joins Few or none for the target query
Grain visibility Usually explicit by table Can be obscured unless carefully documented
Metric consistency Can be centralized in shared models and semantic definitions Definitions may be duplicated if several tables are built independently
Best fit Reusable business analytics A specific stable consumer or workload

Design facts and measures deliberately

Choose a fact-table pattern to match the business process:

  • Transaction fact: one row per event, such as an order line, payment, shipment, session, or ticket event.
  • Periodic snapshot: one row per entity per interval, such as an account balance per day or inventory position per month.
  • Accumulating snapshot: one row per process instance, updated as milestones occur, such as an order moving through fulfillment.
  • Factless fact: records that an event or relationship occurred without a numeric measure, such as attendance or promotion eligibility.
  • Aggregate fact: a precomputed summary for a repeated workload. Keep the detailed fact when users need drill-through, auditability, or dimensions not represented in the aggregate.

Measures also need declared aggregation behavior:

  • Additive: can be summed across the relevant dimensions, such as units sold or line revenue.
  • Semi-additive: can be summed across some dimensions but not time, such as an account balance or inventory level.
  • Non-additive: should not be summed, such as a percentage, ratio, unit price, or conversion rate.

For ratios, retain the numerator and denominator when possible and calculate the ratio at the requested reporting level. Summing daily conversion percentages, for example, is not the same as calculating total conversions divided by total eligible visits.

Dimensions, keys, and history

Dimensions give facts their descriptive context. Common choices include customer, product, date, location, and organization. Flattening a dimension’s hierarchy often helps consumers browse it without extra joins. Use a snowflaked or otherwise separate representation when there is a concrete reason, not simply to avoid every repeated label.

Free tools Windows power users keep installed

One-click scans. No signup required.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Use source business keys to identify real-world entities and warehouse surrogate keys when needed to manage relationships, source-system collisions, or historical versions. Document how keys are generated, how null or unknown entities are handled, and how a key is scoped across source systems. A surrogate key does not remove the need to retain and govern the business key.

For changing dimension attributes, choose history behavior by attribute rather than applying one rule to everything:

  • Type 1: overwrite the prior value. Appropriate when history is not analytically meaningful or a correction should apply retroactively.
  • Type 2: create a new version with effective dates and a current-row indicator. Appropriate when reports must reflect what was true when a fact occurred.
  • Type 3: retain a limited previous value in another column. Use sparingly because it records only a narrow slice of history.

A Type 2 dimension might contain customer_sk, customer_business_key, customer_segment, valid_from, valid_to, and is_current. Historical facts must resolve to the version valid at the event date—not automatically to the current customer row. This can be done by resolving the surrogate key during fact loading or by joining on the business key and effective-date range.

Other useful dimensional patterns include role-playing dimensions (one date table used as order date and ship date), degenerate dimensions (an invoice number retained on a fact), junk dimensions for related low-cardinality flags, mini-dimensions for rapidly changing attributes, and bridge tables for many-to-many relationships. For a many-to-many relationship, define the bridge and any allocation rule explicitly; an untested join can multiply measures.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

A practical layered architecture

Sources
  ↓
Raw ingestion
  ↓
Staging
  ↓
Intermediate / integration
  ↓
Core warehouse
  ↓
Dimensional marts or purpose-built serving tables
  ↓
Semantic layer, BI, notebooks, or applications

Layer names differ between teams. What matters is clear ownership and dependency direction: raw data is retained as appropriate; staging standardizes source records; integration models encode reusable relationships and rules; marts serve identified consumers; and the semantic layer defines how users interpret metrics, dimensions, hierarchies, and security.

Cloud warehouses commonly support ELT—loading data before transforming it in the analytical platform—but ELT does not mean exposing raw tables to every user. Transformation location should reflect privacy, latency, source constraints, streaming needs, and operational requirements. A semantic model is not automatic just because tables exist: it should define shared metrics, relationships, default aggregation, descriptions, access rules, and certified datasets. Microsoft’s Power BI star-schema guidance explains why source-shaped data often needs further dimensional shaping for a robust semantic model.

Make the model operable

Incremental processing

Incremental models can reduce repeated work on large tables when changes can be identified reliably. Specify the change watermark, handling for updates and deletes, late-arriving records, correction windows, backfills, failure recovery, and idempotency. An incremental model with an unreliable watermark can silently preserve stale or missing data; periodically reconcile it against source totals or perform controlled full refreshes where practical.

Partitioning, clustering, and materialization

Choose partitioning and clustering based on common filters, volume, cardinality, data distribution, and the platform’s behavior. They are not universal tuning switches: poorly chosen layouts can add maintenance without improving the actual workload. Materialize an intermediate result or aggregate when repeated expensive work justifies the storage and refresh cost, and when its freshness and invalidation behavior are understood.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

There is no blanket rule that cloud warehouses do not need joins, or that denormalization is always faster. Columnar and distributed engines can execute analytical joins at scale, but joins still affect compute, runtime, failure surface, and comprehension. Databricks likewise notes that modeling choices influence query performance and compute and storage costs in its data-modeling guidance. Measure representative queries and refreshes on the chosen platform rather than assuming one schema will win everywhere.

Track cost by workload where the platform allows it: queries, refreshes, storage, transfers, and backfills all matter. In Snowflake, for example, compute, storage, and data transfer are distinct cost categories; warehouse activity for queries, loading, and DML consumes credits. Exact costs depend on region, configuration, and contract, so consult the current cost documentation rather than treating any general estimate as universal.

Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Support on Ko-Fi

Data quality, governance, and schema change

A production model needs more than a successful SQL run. Add checks appropriate to its role, including:

  • Unique and non-null keys.
  • Accepted values for governed status fields.
  • Referential integrity and fact-to-dimension coverage.
  • Freshness expectations and row-count anomaly checks.
  • Duplicate detection and grain validation.
  • Source-to-target reconciliations for important measures.
  • Tests for expected historical ranges and current-row uniqueness.

Document each model’s grain, definitions, owner, source, refresh frequency, history behavior, exclusions, security classification, and freshness expectation. Add lineage and a change process so owners can assess downstream effects before altering a published interface.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Schema drift is an operational risk, not just a naming inconvenience. Contracts, compatibility checks, change notifications, versioned interfaces, and impact analysis can limit breakage. Platform-specific behavior can make changes expensive: Microsoft notes that schema changes to mirrored Snowflake tables in Fabric can trigger reseeding that processes the full table, with source-side compute implications. See the Fabric Snowflake mirroring FAQ for that particular integration.

A design process that scales beyond the first dashboard

  1. Start with business processes. Identify the processes to analyze—sales, billing, inventory, marketing, support, or product usage—alongside business requirements and available source data.
  2. Declare the grain. Write one sentence for each fact table and get agreement from its producers and consumers.
  3. Identify facts and dimensions. Ask what happened, to whom or what, when, where, at what recorded level, and which attributes describe it.
  4. Set key rules. Distinguish business and surrogate keys; specify unknown-member behavior, collision handling, and source scope.
  5. Choose history behavior. Decide which attributes are overwritten, versioned, or tracked another way, and how late changes are corrected.
  6. Define measure behavior. Mark measures additive, semi-additive, non-additive, derived, snapshot-based, or approximate, and state valid aggregation directions.
  7. Centralize reusable rules. Model shared logic such as net revenue, active subscription, customer status, cancellation, or fiscal calendar once where appropriate.
  8. Build for actual consumers. Publish marts or serving tables around analytical questions, not merely around source-system layouts or organizational charts.
  9. Test and reconcile. Validate keys, grain, coverage, freshness, and important totals; define how failures and restatements are handled.
  10. Document and govern. Assign owners, security classifications, consumer expectations, and a schema-change process.

Choosing the right technique

Need or condition Likely fit Important qualification
Self-service BI and reusable business metrics Dimensional marts, often star schemas, plus a governed semantic layer Grain and metric definitions still need explicit governance.
Enterprise integration for several downstream uses Normalized relational core or another reusable integration model Usually publish simpler consumer-facing views or marts on top.
Many changing sources, auditability, and historical traceability Data Vault-style integration may fit Its extra modeling and metadata overhead requires capable ownership and a downstream presentation layer.
Stable, narrow workload with a known consumer Purpose-built wide serving table or aggregate Keep one declared grain and avoid using it as a catch-all warehouse model.
Hierarchy entities with independent history or ownership Snowflaked dimension or normalized internal representation Consider exposing a flattened consumer view.
Both volatile integration and approachable reporting Hybrid: staging and integration, then dimensional marts and selected serving tables Make layer responsibilities explicit to avoid duplicate business logic.

Also account for team skills, data volumes, latency, query patterns, audit requirements, BI tools, and the cost of refreshes and backfills. The same logical model can be implemented across different warehouses; platform choice does not substitute for sound grain and business definitions.

Common failures and how to prevent them

  • Mixed-grain facts: totals multiply or become inconsistent after joins. Split facts by process and grain, or aggregate inputs to a shared grain first.
  • Over-normalized consumer models: analysts need many joins for routine filters. Keep the normalized core if useful, but publish flattened dimensions or curated views.
  • Overgrown wide tables: unrelated processes and measures are combined. Build purpose-specific serving products with one documented grain.
  • Incorrect Type 2 joins: historical reports show today’s attributes. Resolve the dimension version valid at the fact’s event time.
  • Late-arriving dimensions or facts: records are missing, assigned to unknown members, or alter closed reporting periods. Define inferred-member, reprocessing, correction-window, and restatement policies.
  • Unclear deletes and corrections: absence from a source is treated as deletion without evidence. Determine whether the source provides hard deletes, soft-delete flags, change events, full snapshots, or no delete signal.
  • Unmanaged time semantics: local dates, time zones, fiscal periods, or daylight-saving transitions disagree. Preserve needed source-zone information and govern reporting calendars and event-time interpretation.
  • Uncontrolled schema changes: downstream models and reports break or expensive reprocessing is triggered. Use contracts, compatibility checks, and a planned migration path.

Practical recommendation

For many analytics platforms, a sound starting architecture is source-aligned staging, reusable integration models, dimensional marts for business intelligence, purpose-built wide tables only where a specific workload benefits, and a governed semantic layer for shared definitions. Add Data Vault where source volatility, auditability, and historical integration justify its complexity. Keep the raw and integration layers useful to engineers without asking every analyst to query them directly.

This approach uses each technique for the problem it solves: normalization and Data Vault can support integration; dimensional models make business analysis approachable; wide tables can simplify a known serving workload; and semantic models make measures and relationships consistent for consumers.

Special offer. See more information about Outbyte and uninstall instructions. Please review EULA and Privacy policy.

Readiness checklist

  • The grain of every fact and serving table is written down.
  • Keys and relationships are documented and tested.
  • Measures have explicit aggregation rules.
  • Historical behavior and late-data policy are defined.
  • Many-to-many relationships and allocation logic are visible.
  • Consumers can find definitions, owners, freshness, and lineage.
  • Schema changes have an owner and a compatibility process.
  • Query, refresh, storage, and backfill costs are observable.

Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.