Nee dat valt wel mee.
Er zijn genoeg situaties waarin je wel degelijk redundance nodig hebt om performance te waarborgen. Tabellen met miljoenen mutaties waarop je regelmatig dagrapportages moet dragen bijvoorbeeld, ik vind het in die situatie helemaal geen slecht idee om de geaggregeerde gegevens in een losse tabel te gooien waar dagelijks een regeltje aan wordt toegevoegd. Views zijn wel leuk maar veel te traag in die situatie door de vele aanpassingen. Liever hou je het puur, maar soms kan het niet.
Ik had het idee van indexed views al geopperd in deze thread. Indexed views zijn niet traag, want ze zijn opgeslagen resultsets. Dit IS redundant info opslaan, maar wel info die beheerd wordt door het RDBMS zelf, dus de programmeur van de sync code kan geen fout maken met het updaten van de redundante info want er is geen sync code. De zwakte van het gebruik van redundante info is nl. dat je je redundante info in sync moet houden, en dat dus ALTIJD, ook bij transaction rollbacks bv. Nu moet iedereen natuurlijk zelf weten of hij/zij zelf de redundante info-sync code gaat schrijven, maar ik zou me wel 2 keer bedenken.
Nog een situatie: achteraf moet er ineens bepaalde rapportage mogelijk worden die totaal niet aansluit bij het (daarvoor nog wel nette) datamodel. Je kan dan wel leuk maanden gaan spenderen om alles weer perfect te maken, of je gebruikt een extra tabel met totalen. Uiteraard zitten daar risico's aan, maar je kan niet maar blijven refactoren voor elke miniscule aanpassing.
'achteraf, ineens'... Tja, als je wanneer je huis bijna af is, aankomt kakken met de wens voor een extra toilet op de 1e verdieping ben je ook wat laat. Nu laat software zich nog wel in zekere mate makkelijk wijzigen, maar zonder gevolgen is dat natuurlijk niet.
'Even' een tabelletje erbij prutsen met daarin wat data die door een of ander obscuur last-minute procesje wordt geaggregeerd is wellicht leuk voor de deadline en de manager, maar gaat je op den duur opbreken. Dat veel software engineers dat niets kan schelen omdat ze dan alweer bij een andere klant zitten, is jammer. Bij mij vliegen dat soort mensen er direct uit: je maakt geen shortcuts voor een beetje tijdwinst, je denkt eerst goed na over wat je gaat doen, en past dan wat je hebt aan op die manier zodat wat na de aanpassing ontstaat weer van goede kwaliteit is.
Rapportage is sowieso een traag (relatief dan) gebeuren. Dat snel proberen te krijgen is onbegonnen werk, daar het per definitie over aggregatie van veelal erg veel data gaat, en dat kost per definitie veel tijd. Je kunt het wel wat beperken met wat kunstgrepen, maar veelal schiet je er zelden iets mee op.
Wat het belangrijkste is bij rapportage is dat de gegevens correct zijn. Een fout of achterhaalde gegevens levert foutieve rapporten op en wellicht verkeerde beslissingen. Dat kun je af doen als purisme, maar IMHO is men beter af bij een rapport wat correct is en een half uur duurt dan een foutief rapport wat 1 minuut duurt.
In het geval van de topicstarter zal ik in ieder geval eerst eens gaan meten. Vul een database met representatieve data, en draai eens een rapportage. Mocht het traag zijn: ga je datamodel eens goed langs inzake queries/views/etc. Als het dan nog te traag is moet er misschien toch een extra tabelletje met dubbele data bij.
Wat is dat nou voor advies? Realiseer je je wel wat je hier adviseert? even een tabelletje met dubbele data erbij is niet iets wat je zo maar even doet. Ten eerste kan het zijn dat je model dan inzakt en over een jaar iemand zegt: "WTF doet die tabel daar?" en iedereen de schouders ophaalt omdat degene die dat toen als 'tijdelijke oplossing' aandroeg allang weg is. Ten tweede is redundante data voor overzichten ZEER af te raden TENZIJ jij t.a.t. kan garanderen dat de data in sync is met de live data. Nou, voordat je roept "dat is simpel", zo simpel is dat niet.
Pragmatisme

Ik hou van pragmatisch werken, maar ik vind jouw advies echt niet onder pragmatisme vallen. Verre van dat.