Ich werde eine gegenteilige Meinung zu den meisten Kommentaren zu dieser Frage abgeben. Während EAV BÖSE ist Aus all den Gründen, die Sie hier auf SO und DBA.SE und anderswo oft ausführlich erklärt finden, gibt es eine wirklich häufige Anwendung, für die die meisten Dinge, die mit EAV nicht stimmen, weitgehend irrelevant sind, und die (wenigen) Vorteile von EAV sind sehr deutsch. Diese Anwendung sind Online-Produktkataloge.
Das Hauptproblem bei EAV besteht darin, dass die Datenbank nicht das tun kann, was sie wirklich gut kann, nämlich dabei zu helfen, verschiedenen Informationsattributen über verschiedene Entitäten den richtigen Kontext zu geben, indem sie in einem Schema . Ein Schema zu haben bringt viele, viele Vorteile rund um den Zugriff, die Interpretation und die Durchsetzung der Integrität Ihrer Daten.
Tatsache bei Produktkatalogen ist, dass die Attribute eines Produkts für das Katalogsystem fast völlig irrelevant sind selbst. Produktkatalogsysteme machen (höchstens) drei Dinge mit Produktattributen.
-
Zeigen Sie die Produktattribute in einer Liste für Endbenutzer in der Form an:{Attributname}:{Attributwert}.
-
Zeigen Sie die Attribute mehrerer Produkte in einem Vergleichsraster an, in dem die Attribute verschiedener Produkte einander gegenüberstehen (Produkte sind normalerweise Spalten, Attribute normalerweise Zeilen)
-
Steuern Sie Regeln für etwas (z. B. Preise) basierend auf bestimmten Attribut/Wert-Kombinationen.
Wenn Ihr System lediglich Informationen wiedergibt, die (für das System) semantisch irrelevant sind, dann ist das Schema für diese Informationen im Grunde nicht hilfreich. Tatsächlich ist das Schema im Weg in einem Online-Produktkatalog, insbesondere wenn Ihr Katalog viele verschiedene Produkttypen enthält, da Sie immer wieder in das Schema zurückkehren müssen, um daran herumzubasteln, um neue Produktkategorien oder Attributtypen zu ermöglichen.
Aufgrund seiner Verwendung ist sogar der Datentyp eines Attributwerts in einem Produktkatalog nicht unbedingt (lebenswichtig) wichtig. Für einige Attribute möchten Sie möglicherweise Einschränkungen auferlegen, z. B. „muss eine Zahl sein“ oder „muss aus dieser Liste stammen {...}“. Das hängt davon ab, wie wichtig die Attributkonsistenz für Ihren Katalog ist und wie ausgefeilt Ihre Implementierung sein soll. Wenn ich mir die Produktkataloge mehrerer Online-Händler anschaue, würde ich sagen, dass die meisten bereit sind, Einfachheit gegen Einheitlichkeit einzutauschen.
Ja, EAV ist böse, außer wenn es nicht so ist.