Několik dalších odpovědí na vaše otázky:
1) Jste skoro v cíli pro někoho, kdo k takovému problému přistupuje poprvé. Myslím, že dosavadní odkazy od ostatních na tuto otázku ji do značné míry pokrývají. Dobrá práce!
2 &3) Výkonnostní zásah, který dosáhnete, bude do značné míry záviset na tom, zda máte a optimalizujete správné indexy pro vaše konkrétní dotazy/procedury, a co je důležitější, na objemu záznamů. Pokud nemluvíte o více než milionu záznamů ve vašich hlavních tabulkách, zdá se, že jste na dobré cestě k dostatečně tradičnímu designu, takže výkon nebude na rozumném hardwaru problém.
To znamená, a to se týká vaší otázky 3, na začátku byste se pravděpodobně opravdu neměli příliš obávat výkonu nebo přecitlivělosti na normalizační ortodoxii. Jedná se o reportovací server, který vytváříte, nikoli o aplikační backend založený na transakcích, který by měl velmi odlišný profil s ohledem na důležitost výkonu nebo normalizace. Databáze, která podporuje živou registraci a plánovací aplikaci, musí dbát na dotazy, jejichž vrácení dat trvá několik sekund. Funkce serveru sestav má nejen větší toleranci pro složité a zdlouhavé dotazy, ale i strategie pro zlepšení výkonu se značně liší.
Například v prostředí aplikací založeném na transakcích mohou vaše možnosti zvýšení výkonu zahrnovat refaktorování vašich uložených procedur a struktur tabulek na n-tý stupeň nebo vývoj strategie ukládání do mezipaměti pro malá množství běžně požadovaných dat. V prostředí sestav to jistě můžete udělat, ale můžete mít ještě větší dopad na výkon zavedením mechanismu snapshotů, kde se spouští naplánovaný proces a ukládá předem nakonfigurované sestavy a vaši uživatelé přistupují k datům snapshotu bez stresu na úrovni vaší databáze. na základě žádosti.
To vše je sáhodlouhé chvástání, které má ilustrovat, že jaké designové principy a triky použijete, se mohou lišit vzhledem k roli databáze, kterou vytváříte. Doufám, že vám to pomůže.