Ist es eine gute Idee, normalisierte Tabellen mit denormalisierten indizierten Ansichten zu verwenden?

StackOverflow https://stackoverflow.com/questions/191642

Frage

Ich architektiere gerade eine neue App mit einem hohen Lesung: Schreibverhältnis. Bei meinem derzeitigen Arbeitgeber haben wir aus Leistungsgründen viele Denorme -Daten in unseren Tabellen. Ist es bessere Praxis, vollständig 3NF -Tabellen zu haben und dann indizierte Ansichten zu verwenden, um die gesamte Denormalisierung durchzuführen? Sollte ich Abfragen gegen die Tische oder Ansichten ausführen?

Ein Beispiel für einige der Dinge, die ich interessiere, sind die Aggregate von Spaltenkindertabellen (z. B. haben die Anzahl der Benutzerpostzählungen irgendwo gespeichert).

War es hilfreich?

Lösung

Im Allgemeinen ist es eine gute Idee, denormalisierte Ansichten zu haben, wenn Sie sehr häufig über mehrere normalisierte Tabellen zugreifen müssen. In den meisten Fällen ist es eine erhebliche Leistungssteigerung gegenüber der Verwendung eines Join und Abfragers direkt an den Tabellen, und es ist normalerweise nicht weniger aufrechterhalten, da entweder Ihre Ansicht oder Ihr Join geschrieben werden können, um Änderungen an Teilen der Tabellen zu agnostisch zu sein es benutzt nicht.

Ob alle Ihre Tabellen sollten in der dritten normalen Form eine andere Frage sein. In den meisten Anwendungen habe ich mit der Antwort gearbeitet die meisten Tabellen sollten auf diese Weise normalisiert werden, aber es gibt Ausnahmen. Ob eine Ausnahme eingerichtet werden soll, hängt davon ab, wie die Daten verwendet werden, und ob Sie sehr zuversichtlich sein können, dass sich diese Verwendung in Zukunft nicht ändert.

Es kann kostspielig sein, später zurückzukehren und sich neu zu normieren, weil Sie etwas falsch gemacht haben, aber über-normale Daten, die einfach zu verwenden und zu verstehen sollten, kann die Dinge komplizierter und schwieriger machen, als sie sein müssen. Ihre Kilometerleistung kann variieren.

Andere Tipps

Wenn Sie Ansichten verwenden möchten, um dem Benutzer denmormalisierte Daten zu präsentieren (und Sie verwenden SQL Server), sollten Sie sich die Schemabinding -Klausel ansehen. Wenn sich eine Ansicht schenable, können Sie sie indexieren und der Index wird aktualisiert, wenn die zugrunde liegenden Tabellen aktualisiert werden. Wenn die Indizes gut eingerichtet sind, können Personen, die nach Daten suchen Datum, wenn sich die zugrunde liegenden Tabellen ändern.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top