insert into when_you_can_have_columns (
reason_1,
reason_2,
reason_3,
reason_4,
reason_5
) values (
'Joins are a #!@% to write',
'Aggregation functions are a pain',
'You''re not in 1st normal form',
'You''re limited to 1000 values',
'To add more reasons needs a schema change'
);
A similar design flaw is to implement rows as a column separated list "overcoming" the final two limitations.
However, they introduce the costs of everything is a string and having to do messy substrings to extract the "rows".