Obwohl wie gezeigt minimalistisch, führt die Attributtabelle von Model2 das Konzept der Metadaten ein in die Mischung, mit all dem Guten, das daraus entsteht. Es gibt noch andere Vorteile von Model2, zum Beispiel die Leistungsgewinne verbunden mit einer kleineren Zeilengröße (der Wertetabelle), aber ich möchte mich auf das Metadatenkonzept konzentrieren.
Sogar wie es ist Die Attributtabelle von Model2 bildet ein Repository aller gültigen Attribute (mit model1 müsste man eine Art aggregierte Abfrage ausführen, um eine solche Liste zu erhalten). Außerdem und wie es ist , reicht das Repository aus, um Fremdschlüsseleinschränkungen einzuführen um die Integrität des Datensatzes aufrechtzuerhalten (bei Modell 1 würde man externe Formen der Validierung der in der Attributspalte gespeicherten Werte benötigen.
Mit ein paar einfachen Ergänzungen kann die Attributtabelle zu einem vielseitigen Repository werden, das für verschiedene Zwecke verwendet werden kann. Beispielsweise kann die Tabelle Folgendes enthalten
- Informationen wie der anzeigefreundliche Name jedes Attributs
- einige Flags, die den Feldtyp angeben (numerisch vs. String vs. Datum etc.), zur differenzierten Handhabung/Verarbeitung
- die bestimmte Wertetabelle, in der das zugrunde liegende Attribut gespeichert ist (Modell zeigt nur eine Tabelle, aber Optimierung/Skalierung fordert manchmal dazu auf, die Tabellen aufzuteilen)
- die Tatsache, dass das Attribut als eigene Spalte in der „Wert“-Tabelle gespeichert werden kann (wiederum eine Form der Optimierung, die im Wesentlichen das Beste aus beiden Welten erhält:die Flexibilität des Schemas des EAV-Modells, aber die Leistung des traditionellen relationales Modell für die am häufigsten verwendeten und/oder für alle Entitäten am häufigsten verwendeten Attribute.
- die Fähigkeit, Attribute umzubenennen, ohne die Haupttabelle zu stören. Änderungen nur auf Metadatenebene.
- verschiedene anwendungsorientierte Semantiken. Zum Beispiel Indikatoren, dass ein bestimmtes Attribut als eines der einfachen vs. erweiterten Suchfelder angeboten werden sollte.
Kurz gesagt, die Attributtabelle wird zu einer Ressource, die es der Anwendung ermöglicht, wirklich datengesteuert zu sein (oder genauer gesagt, meta datengetrieben). Vielleicht gefällt Ihnen auch eine Entitätstabelle, d. h. eine, in der die Metadaten zu den verschiedenen Entitätstypen gesammelt werden:Welches sind die verschiedenen Entitätstypen, welche Attribute sind für welchen Entitätstyp zulässig usw.
Nun... beachte den Kommentar von zerkms , unter der Frage selbst. Trotz all seiner Vorteile bringt das EAV-Modell auch Nachteile und Herausforderungen mit sich, wie angedeutet, die Komplexität der Abfragen und auch Leistungsprobleme. Diese Bedenken sollten EAV jedoch nicht von vornherein disqualifizieren:Es gibt viele Anwendungsfälle, in denen EAV ein besserer Ansatz ist.
Angenommen, EAV ist die Wahl, dann ist Modell2, oder sogar etwas Ausgefeilteres, Modell1 definitiv überlegen. P>