In der RDBMS-Community ist EAV ein Antipattern. Für die "infinite Flexibilität", die durch die Verwendung von EAV erhalten wird, ist das SQL, das benötigt wird, um die Daten als Datensätze/Objekte zu rekonstruieren, wesentlich komplexer. Sie erhalten auch den "Vorteil", dass Sie keine der verfügbaren Datenintegritätstools verwenden können (Fremdschlüssel, Prüfbedingungen usw.). Im Laufe der Zeit bricht dieses Design unter seinem eigenen Gewicht zusammen.
Wenn Sie einen Anwendungsfall, wo die Datenelemente Teil der Super-Typ/Untertyp Beziehungen sind, aber sie haben nicht viel ändern, dann Modell Tabellen nach Ihren Bedürfnissen:
1.) Klasse Tabellenvererbung = bestimmte Untertyptabellen mit einem gemeinsamen übergeordneten Element. Dies ist am besten, wenn der Super-Typ und der Subtyp jeweils eine signifikante Anzahl eindeutiger Attribute aufweisen.
2.) Concrete Table Inheritance = Platzieren Sie die gemeinsamen Super-Typ-Spalten in jeder Tabelle des Untertyps. Dies funktioniert besser, wenn der Super-Typ nicht viele eigene Attribute hat, sondern die Subtypen.
3.) Single Table Inheritance = Platzieren Sie die Spalten für alle Untertypen in 1 Tabelle zusammen mit den Spalten des Super-Typs. Spalten, die nicht zum Untertyp einer bestimmten Zeile gehören, haben einen NULL-Wert. Dies funktioniert am besten, wenn jeder Untertyp nicht viele eindeutige Attribute aufweist oder mehrere Untertypen Spalten/Attribute teilen.
Sie können diese 3 ein wenig mischen und anpassen, aber ich würde empfehlen, mit einem dieser Designs zu bleiben.
Wenn Sie wirklich EAV verwenden müssen, verwenden Sie XML-Spalten in einem RDBMS, wenn ein relativ kleiner Anteil Ihrer Daten in Ihrem EAV-Design (im Vergleich zur Gesamtdatenbank) vorhanden ist. Wenn viele Ihrer Daten in einem EAV gespeichert werden, ist ein RDBMS nicht das Werkzeug, das Sie benötigen. Schauen Sie in die Dokument/NoSQL/Schlüssel-Wert-Datenbanken wie MongoDB, Cassandra, etc. RDBMSes, die EAV implementieren, wenn nicht früh, werden schließlich zu einem Albtraum der Kodierung.
Da das Datum Ihrer Frage, würde ich neugierig zu wissen, welche Route Sie gewählt haben und was Sie gelernt, was man nicht gemocht/mochte, usw.
Option 3 werden Sie auch Probleme geben, wenn es kommt zum Sortieren, ganz zu schweigen von der Leistungseinbuße, die man für jeden Wert von varchar in den richtigen Typ umwandeln muß. Wir versuchen unser erstes EAV-Design und wir gehen mit Option 2 – Kyle
Ich versuche auch, mit Option 2 zu gehen. – Oleg