C'est une erreur courante de se soucier des "grandes" tables et des performances. Si vous pouvez utiliser des index pour accéder à vos données, cela n'a pas vraiment d'importance si vous avez 1 000 enregistrements sur 1 000 000 - du moins pas autant que vous pourriez le mesurer. La conception que vous mentionnez est couramment utilisée; c'est une excellente conception où le temps est un élément clé de la logique métier.
Par exemple, si vous voulez savoir quel était le prix d'un article au moment où le client a passé la commande, être en mesure de rechercher des enregistrements de produits où valid_from
Ce n'est pas toujours le cas - si vous conservez les données uniquement à des fins d'archivage, il peut être plus judicieux de créer des tables d'archivage. Cependant, vous devez être sûr que le temps est vraiment ne fait pas partie de la logique métier, sinon la difficulté de rechercher plusieurs tables sera importante - imaginez devoir rechercher soit la table product OU la table product_archive chaque fois que vous souhaitez connaître le prix d'un produit au moment où la commande a été passée .