Do Not Overnormalize Your Schema

For a columnar database engine, denormalization is cheap from a storage point of view, while table joins are expensive.

Example:

When storing the history of changes, store all columns of record versions in the same table as the source data, instead of retaining the history of each column in an extra table, to avoid table joins.