Split tables by their job:
- Facts record events — orders, page views, payments. Narrow rows, many of them, always with a timestamp.
- Dimensions describe things — customers, products, regions. Wide rows, few of them, mostly stable.
SQL
SELECT d.region, SUM(f.amount) AS revenue
FROM order_facts f
JOIN customer_dim d USING (customer_id)
GROUP BY d.region;
Facts answer "how much"; dimensions answer "sliced by what". Keeping the two apart is most of what "star schema" means.