Fondamentalement, mysql a une longueur de ligne variable tant que l'on ne change pas le au niveau de la table. Ainsi, les colonnes vides n'utiliseront pas d'espace (enfin, presque).
Mais avec des blobs ou des colonnes de texte, il peut être préférable de les normaliser, car ceux-ci peuvent avoir de grandes quantités de données à stocker et cela doit être lu/ignoré à chaque fois qu'une table est analysée. Même si la colonne n'est pas dans le jeu de résultats et que vous effectuez des requêtes en dehors d'un index, cela prendra du temps sur un grand nombre de lignes.
En tant que bonne pratique, je pense qu'il sera rapide de mettre tous les cols administratifs et souvent utilisés dans une table et de normaliser tout le reste. Une sorte de conception "verticale" comme dans votre deuxième exemple sera complexe à lire et dès que vous travaillerez avec des tables temporaires, vous rencontrerez tôt ou tard des problèmes de performances.