Data Modeling Best Practices

Chapter 2 · Practice 4 of 4

Keep transaction identifiers on the fact table as degenerate dimensions

From Fact tables

Why it matters

An order number or invoice number is useful for filtering and drilling into detail, but it has no attributes of its own. Creating a dimension table that holds only that one column adds a join and nothing else.

Microsoft's guidance calls this a degenerate dimension: an attribute at the same grain as the facts, kept on the fact table. If report tools need it as a separate table, expose it as a view that selects the distinct values.

Similarly, when you have several small, low-cardinality flags, such as order status and delivery status, consider combining them into a single junk dimension rather than adding many tiny dimensions or many flag columns to the fact table.