Ignore all the advice about "rules". Create a realistic dataset and run performance tests before you release anything into production. Check your query-plans to find the pain-points. The database is frequently treated black box surrounded by superstition and cargo-cult "rules" that are either out of date or just educated guesses.
Wrap anything weird in a view so you can rebuild it as you see fit.
Avoid getting fancy as much as possible until the simple, normalized, naive implementation fails.