Das ist ja der Punkt, Denormalisierung = Abstrus. Man wirft die Sicherheits-/Konsistenzmechnismen über Bord, wenn man denormalisiert oder erst gar nicht normalisiert.
Dennoch ist es legitim zu denormalisieren, wenn man adäquate Ersatzmechnismen schafft.
Und Denormalisierung ist das letzte Mittel, ganz klar. Ein materialized view wäre vorzuziehen, wenn die DB das bietet und die Aktualisierungsfreuqenz ausreicht. Letztlich verbraucht ein materialized View aber auch verhältnismäßig viel Ressourcen, weil er Daten doppel hält und er bricht dabei die Konsistenz, wenn er nicht aktuell ist. Also ist es kein Allheilmittel.
Letztlich ist es vollkommen wurscht, was man als Beispiel nimmt. Und egal ob man Attribute in die Detailebene zieht oder aus ihr raus. Beispiel Produkte, Produkte gehören wahrscheinlich zu den vielfältigsten Entitäten, die man haben kann. Wahrscheinlich hat jeder Entwickler seine Produkttabellen schon mehrmals geändert und nicht nur, weil mehr Infos abzubilden waren, auch wegen der Performance.
Die Metro hat gerade beschlossen sich aufzuspalten. Ganz genau weiß ich es nicht, aber eine der gröbsten Kategoriesierungen, die man dort bilden kann wäre vermutlich Food/Nonfood, gemäß der Aufspaltung. Dieses Attribut kann ich aus verschiedensten Artikelmerkmalen ableiten, die vielleicht in irgendwelchen Produktdetails verwoben sind, oder ich kann sie auf höchster Ebene, sagen wir der Hauptprodukttabelle, ansiedeln. Dann können die Leiter von Food und Nonfood bequem die Reports für Ihre Sparte auseinander halten. Also die können es eh bequem, weil sie einen One Button Manager Report bekommen, aber wie bequem hat es der Entwickler oder die Datenbank, wenn die Gruppenattribute für die Produktumsatzreports aus den Daten geholt werden.
Ich wette, diese Merkmale landen früher oder später irgendwo "sehr weit oben".
Schon die Erfassung von PLZ und Ort in einer Adresstabelle sind ein Beispiel für Denormalisierung.
M.E. ist jede Denormalisierung ein Performancegewinn, natürlich mit den Randeffekten, die ich im vorigen Beitrag genannt habe.
Irgendwann sagt einem vermutlich der gesunde Menschenverstand, dass es nicht sinnvoll ist, für jede Bestellposition, Name und Anschrift des Bestellers zu erfassen.