logoalt Hacker News

amazingamazing05/14/20252 repliesview on HN

I don't disagree with your point, but over normalization and joining everywhere also isn't necessarily the answer, even with an index. there's no easy answer to this, really depends on the performance characteristics the critical user journeys need.

with a little pain, if I had to pick an extreme, I'd pick extreme normalization with materialized views that are queried (e.g. no joins), rather than joining all of the time.


Replies

sroussey05/15/2025

I typically go for 3rd normal form, and selectively denoralize where it has true performance value.

show 2 replies
williamdclt05/15/2025

> materialized views

how though? Postgres doesn't support auto-refreshing materialized views when the underlying data changes (with good reasons, it's a really hard problem)