Vererbung der Klassentabelle gegen Denormalisierung

8

Ich versuche eine Spezialisierung / Generalisierung zu modellieren, die auf die Verwendung der Vererbung von Klassentabellen abzielt (siehe diese Antwort ) .

Mein Kollege hat jedoch Bedenken hinsichtlich Wartung und Leistung, da es viele (50+) überlappende Spezialisierungen derselben Tabelle geben wird. Sein Vorschlag ist, eine Tabelle mit den folgenden Spalten zu erstellen:

  • Verweis auf die allgemeine Tabelle
  • Verweis auf eine Tabelle, die Spezialisierungstypen enthält
  • Verweis auf eine Tabelle, die Attributwerte verwaltet

Auf diese Weise werden alle Attribute in einer Tabelle verwaltet und können nach der Spezialisierungsspalte gefiltert werden. Ich weiß nicht, wie dieser Entwurf heißt, aber ich mache mir Sorgen, dass es irgendwie mit EAV zu tun hat ...

Mein Hauptanliegen ist Änderungsanomalien , aber abgesehen davon sehe ich keinen Grund, dass es eine schlechte Idee ist . Ist eine Lösung der anderen klar überlegen, oder sollten wir nur eine auswählen und weitermachen?

    
Community 12.04.2010, 16:43
quelle

1 Antwort

7

Beim Entwerfen von Tabellen entwerfe ich sie normalerweise mit einem Gedanken: Benutzung.

Wie schreibe ich die Daten dort und wie werde ich sie abfragen? Ich verzerre den Entwurf in Richtung Lesen oder Schreiben, basierend auf dem, was für die Leistung wichtiger ist, wie sich wiederholend, etc.

Ihre Frage erklärt nicht wirklich Ihre Verwendung, daher sind alle Vorschläge in meiner Antwort hier vollständige Spekulationen. Wenn Sie 20k Zeilen pro Tag einfügen, wäre das Design anders, als wenn Sie 5 pro Tag einfügen würden. Auch, wenn Sie 20k Suchen pro Tag an irgendeiner Spalte irgendeines Typs laufen lassen müssen oder wenn Sie 5 pro Tag laufen lassen. Dies würde sich auf die Einrichtung Ihrer Tabellen auswirken.

Wenn man das gesagt hat, könnte ein allgemeiner Ansatz sein, so etwas zu tun:

Die über 50 überlappenden Spezialisierungstabellen sind ein Albtraum für das Schreiben von Abfragen. Ich würde versuchen, 1 Haupthaupttabelle und vielleicht 5 oder so andere allgemeine Tabellen zu finden, wo Sie ein wenig in "Single Table Inheritance" (wo Sie mehrere Spalten haben können, die nicht für jeden Typ gelten, aber enthalten sind) Sie decken so viele Spalten wie möglich ab. Von dort überdecken Sie die restlichen Spalten mit dem EAV-ähnlichen Ansatz.

    
KM. 12.04.2010, 18:14
quelle