Ich stelle mir vor, dass eine zu starke De-Normalisierung Raum und Zeit verschwenden würde
In den meisten mittelgroßen OLTP-Branchenanwendungen ist der Speicherplatz kein Problem. Lassen Sie also Platz. Mit der Zeit und mit der Zeit meine ich die Leistung der Abfrage, die normalerweise verbessert werden kann und kein echtes Problem verursacht, es sei denn, Sie haben ein schlechtes Design, unzureichende Ressourcen, eine extrem große Datenbank, eine sehr große Anzahl von Transaktionen oder alle obenstehendes. Die meisten Anwendungen, die heutige Datenbanken verwenden, haben selten ein Leistungsproblem, nur weil die Datenbank normalisiert ist.
Riesige Blobs werden dupliziert oder es ist schwieriger, die Konsistenz aufrechtzuerhalten, da Sie mehrere Felder mithilfe einer Transaktion aktualisieren müssen.
Durch die Normalisierung Ihrer Datenbank können Sie Folgendes sicherstellen:
Keine redundanten Daten.
Keine große Anzahl von Log-Enteritis verursacht werden (z. B. mit einer Tabelle von 2 Millionen Kunden: UPDATE Customer Set Country = "USA" WHERE Country = "US")
Vollständig unterstützt werden von SQL Queries. Dieser Punkt ist sehr wichtig.
Fährt sauberen Anwendungscode.
Erzwingen Sie ein hohes Maß an Datenkonsistenz über die Datenbank, ohne die Anwendung zu belasten.
Teilen Sie Geschäftsregeln, die in der Datenbank von verschiedenen Anwendungen definiert wurden, ohne denselben Code in verschiedenen Anwendungen zu codieren.
Die Normalisierung erzeugt jedoch eine optimale Struktur für alle Spalten und Tabellen. Dies ist möglicherweise nicht immer in Ihrer speziellen Anwendung erforderlich. Sie können dann aufgrund Ihres Verständnisses Ihrer Domain und Ihrer Anwendung festlegen, dass einige der Tabellen / Spalten als Kompromiss für die Geschwindigkeit de-normalisiert werden. Dies wäre jedoch eher eine bewusste Entscheidung als ein Versehen.
Wie kann ich bei einem 3NF-FD-Satz und einer Reihe von Abfragen die Beschleunigung / Verlangsamung der De-Normalisierung vorhersagen?
Sie können die Leistung ohne Tests nicht genau vorhersagen (was Sie tun können, bevor Sie den Anwendungscode schreiben). Sie können jedoch Faktoren eliminieren und erkennen, die aufgrund des Designs zu einer schlechten Leistung führen würden. Beispielsweise können Sie die zu verwendende Indexstrategie wie folgt identifizieren (andere Techniken können vorhanden sein):
Erstellen Sie eine Matrix mit Abfragen und Spalten, die von diesen Abfragen betroffen sind.
Suchen Sie die am häufigsten verwendeten Spalten.
Erwägen Sie, Indizes für diese Spalten zu erstellen.
Dies ist hauptsächlich ein Job, bei dem Ihr DBA Sie unterstützen kann. Leistung ist mehr als Normalisierung. Es gibt Aspekte der Datenverteilung über Datenträger, der vertikalen Tabellenaufteilung, der Partitionierung, der Indextypen und der Indexpufferung, um nur einige zu nennen. Alle diese Techniken sollten in Büchern und in der Herstellerdokumentation unter den Themen "Datenbankdesign" und "Datenbankleistungsoptimierung" behandelt werden. Bei der obigen Diskussion wird davon ausgegangen, dass es sich bei Ihrer Anwendung um eine OLTP-Anwendung handelt.