Die beste Vorgehensweise ist immer Beginnen Sie mit 3NF und ziehen Sie dann eine Denormalisierung nur in Betracht, wenn Sie ein bestimmtes Leistungsproblem finden.
Leistung ist nur eins der Probleme, mit denen Sie sich mit Datenbanken auseinandersetzen müssen. Durch das Duplizieren von Daten laufen Sie Gefahr, inkonsistente Daten in Ihrer Datenbank zuzulassen, wodurch eines der Kernprinzipien relationaler Datenbanken, die Konsistenz (der C
in ACID
) .
Ja, Joins haben ihren Preis, daran führt kein Weg vorbei. Die Kosten sind jedoch normalerweise viel geringer als Sie denken und können oft durch andere Faktoren wie Netzwerkübertragungszeiten überschwemmt werden. Indem Sie sicherstellen, dass die relevanten Spalten richtig indexiert sind, können Sie viele dieser Kosten vermeiden.
Und denken Sie an das Optimierungsmantra:messen, nicht raten! Und messen Sie in einer produktionsähnlichen Umgebung. Und behalten Regelmäßiges Messen (und Anpassen) - Optimierung ist nur ein Set-and-Forget-Vorgang, wenn sich Ihr Schema und Ihre Daten nie ändern (sehr unwahrscheinlich).
Die Umkehrung für die Leistung kann normalerweise sicher gemacht werden, indem Trigger verwendet werden, um die Konsistenz aufrechtzuerhalten. Dies verlangsamt natürlich Ihre Aktualisierungen, lässt Ihre Auswahl aber möglicherweise immer noch schneller laufen.