is storage expensive in the 21st century ?
honestly . not really.
disk is cheaper.
memory is bigger.
cloud providers give terabytes like candies now haha!
but databases still care deeply about saving space.
why ?
because smaller rows = more rows fitting inside a single page.
and that changes performance massively.
more rows per page means:
less disk io
fewer page reads
better cache efficiency
faster scans
better performance for multi-column queries
this is where postgres engineering becomes beautiful.
even tiny optimizations matter because databases operate at massive scale.
saving a few bytes per row may sound useless…
until your table has:
10 million rows
multiple indexes
high traffic
frequent joins
concurrent reads
suddenly those "few bytes" become:
fewer pages
less memory pressure
less io
better query speed
that is why postgres does not waste 32 bits or 64 bits storing fake "null values".
instead it keeps a compact null bitmap: 1 bit per column.
smart engineering is rarely about saving one row.
it is about making millions of rows fit beautifully together.
conclusion: Database design is always about tradeoffs ! sometimes a flatter table is better because joins are expensive, sometimes splitting data is better because smaller rows mean less io and better cache efficiency, and sometimes an entirely different design fits the workload better. good database engineering is not about blindly following normalization rules, it is about understanding access patterns, query behavior, memory usage, indexing, and the actual io cost happening behind the scenes.