Datenbankarchitektur & Magento Internals

Das Magento EAV Model
vollständig erklärt

Entity-Attribute-Value: Konzept, Datenbankstruktur, Vor- und Nachteile – mit konkreten Tabellenbeispielen aus Magento 2

⏱ 15 Min. Lesezeit Datenbankdesign Magento 2

Was ist das EAV-Modell?

Das EAV-Modell (Entity-Attribute-Value) ist ein Datenbankdesignmuster, das eine hochflexible Speicherung von Daten ermöglicht, deren Struktur nicht vollständig im Voraus bekannt ist oder sich häufig ändert. Statt jede Eigenschaft eines Objekts als eigene Tabellenspalte zu speichern, werden alle Eigenschaften als Zeilen in einer universellen Wertetabelle abgelegt.

Das Konzept basiert auf drei fundamentalen Bestandteilen, die dem Muster seinen Namen geben:

  • Entity (Entität): Das Objekt, das beschrieben wird – beispielsweise ein Produkt, ein Kunde oder eine Bestellung.
  • Attribute (Attribut): Die Eigenschaft, die beschrieben wird – beispielsweise „Farbe", „Gewicht" oder „Hersteller".
  • Value (Wert): Der konkrete Wert des Attributs für die jeweilige Entität – beispielsweise „Rot", „2,5 kg" oder „Sony".

In einer klassischen relationalen Datenbank würde man ein Produkt in einer Tabelle mit festen Spalten modellieren. Mit dem EAV-Modell hingegen wird jede Produkteigenschaft als eine eigene Zeile gespeichert. Dies erlaubt theoretisch unbegrenzte Attribute, ohne das Datenbankschema zu verändern.

Abbildung 1: EAV-Grundkonzept – Vergleich klassische Tabelle vs. EAV

Klassische Flat Table: products
id name color weight manufacturer
1 T-Shirt Basic Rot 0.3 kg BrandX
2 Laptop Pro NULL 2.1 kg TechCorp
3 Sneaker Lauf Blau 0.9 kg NULL
⚠️ Neue Attribute = neue Spalten → Schemaänderung nötig
EAV-Struktur: product_entity_varchar
value_id entity_id attribute_id store_id value
1 1 73 0 T-Shirt Basic
2 1 92 0 Rot
3 2 73 0 Laptop Pro
4 2 97 1 Laptop Pro DE
✅ Neue Attribute = neue Zeilen → kein Schemaänderung nötig

Das Grundprinzip des EAV-Modells ist elegant in seiner Einfachheit: Wo eine relationale Tabelle eine Zeile pro Entität mit vielen Spalten hat, hat EAV viele Zeilen pro Entität, aber nur wenige Spalten. Diese Invertierung bringt sowohl erhebliche Vorteile als auch spürbare Nachteile mit sich.

EAV vs. Flat Tables vs. JSON – ein Vergleich

Bevor wir tiefer in Magento eintauchen, lohnt sich ein Vergleich der drei wichtigsten Datenbankdesignansätze für flexible Produktdaten:

Abbildung 2: Vergleich EAV vs. Flat Table vs. JSON-Spalte
Kriterium Flat Table EAV-Modell JSON-Spalte
Schemaflexibilität ❌ Gering ✅ Sehr hoch ✅ Sehr hoch
Abfrageperformance ✅ Sehr schnell ❌ Langsam (viele JOINs) ⚠️ Mittel
Datenmenge ✅ Kompakt ❌ Sehr groß ✅ Kompakt
Typsicherheit ✅ Stark ⚠️ Durch Typ-Tabellen ❌ Schwach
Indexierung ✅ Einfach ⚠️ Komplex ⚠️ Begrenzt
Mehrsprachigkeit ❌ Schwierig ✅ Nativ via store_id ⚠️ Möglich
Magento-Nutzung ⚠️ Flat Index-Tabellen ✅ Kernarchitektur – Kaum

Das EAV-Modell ist kein Allheilmittel und wurde in der Datenbankwelt kontrovers diskutiert. Der berühmte Datenbankexperte Joe Celko bezeichnete EAV einmal als „Spreadsheets in der Datenbank" – ein Muster, das die Stärken relationaler Datenbanken teilweise untergräbt. Dennoch hat es für spezifische Anwendungsfälle klare Berechtigung – und Magento ist ein Paradebeispiel dafür.

EAV-Datenbankstruktur im Detail

In einer vollständigen EAV-Implementierung wie Magento besteht das Modell aus mehreren miteinander verknüpften Tabellen. Das Herzstück ist die Entity-Tabelle, die die Grunddaten jeder Entität hält, ergänzt durch Attribut-Metadaten und mehrere Wertetabellen für verschiedene Datentypen.

Abbildung 3: EAV-Tabellenarchitektur in Magento 2

catalog_product_entity entity_idINT attribute_set_idSMALLINT type_idVARCHAR(32) skuVARCHAR(64) created_atTIMESTAMP updated_atTIMESTAMP eav_attribute attribute_idSMALLINT entity_type_idSMALLINT attribute_codeVARCHAR(255) backend_typeVARCHAR(8) frontend_inputVARCHAR(50) is_requiredSMALLINT ..._entity_varchar value_id entity_id (FK) attribute_id (FK) store_id value VARCHAR(255) ..._entity_int value_id entity_id (FK) attribute_id (FK) store_id value INT ..._entity_decimal value_id entity_id (FK) attribute_id (FK) store_id value DECIMAL(12,4) ..._entity_datetime value_id entity_id (FK) attribute_id (FK) store_id value DATETIME ..._entity_text value TEXT (Beschreibung etc.) Legende Fremdschlüsselbeziehung Entity / Haupttabelle Wertetabelle

Besonders wichtig ist das Konzept der backend_type-Spalte in der Attribut-Metadaten-Tabelle. Sie bestimmt, welche der Typ-spezifischen Wertetabellen für dieses Attribut verwendet wird. Magento kennt fünf Backend-Typen: varchar, int, decimal, datetime und text. Jeder Backend-Typ entspricht einer eigenen Tabelle mit der entsprechenden Speichertyp-Spalte.

EAV in Magento 2 – Wo wird es eingesetzt?

Das EAV-Modell ist das Fundament der Magento-Datenbankarchitektur. Magento verwendet EAV für alle zentralen Geschäftsobjekte, die flexible und erweiterbare Attribute benötigen. Die vier wichtigsten Entity Types in Magento sind:

Catalog Product

entity_type_code: catalog_product

Produktattribute wie Name, Beschreibung, Preis-relevant (nicht Preis selbst), Status, Gewicht, Farbe, Größe – alle EAV-basiert gespeichert.

Catalog Category

entity_type_code: catalog_category

Kategoriename, Description, Meta-Tags, Anzeigeeinstellungen, Landing Pages – alle als EAV-Attribute, mehrsprachig pro Store View.

Customer

entity_type_code: customer

Vorname, Nachname, E-Mail, Geburtsdatum, Geschlecht, aber auch Custom Attributes für CRM-Integrationen oder Kundensegmentierung.

Customer Address

entity_type_code: customer_address

Straße, Stadt, Postleitzahl, Land, Telefon – alle in EAV-Tabellen. Ermöglicht länderspezifische Adressfelder ohne Schemaänderung.

Dabei ist es wichtig zu verstehen, dass nicht alle Daten in Magento über EAV gespeichert werden. Bestellungen, Rechnungen, Lieferungen und Gutschriften nutzen ein klassisches relationales Modell mit Flat Tables, da hier nach der Erstellung keine Schemaflexibilität benötigt wird und die Abfrageperformance kritisch ist. Preisdaten für Produkte werden in separaten Tabellen wie catalog_product_index_price gehalten.

Wichtige EAV-Tabellen in Magento 2

Eine frische Magento 2 Installation enthält über 200 Tabellen. Die EAV-bezogenen Tabellen lassen sich in mehrere Gruppen unterteilen. Hier sind die wichtigsten Tabellen mit ihrer Funktion:

Abbildung 4: EAV-Kerntabellen in Magento 2

Tabellenname Typ Beschreibung
eav_entity_typeMetaDefiniert Entity-Typen (Produkt, Kunde etc.) und ihre Tabellenpräfixe
eav_attributeMetaAlle Attribute mit Code, Typ, Frontend-Label und Backend-Typ
eav_attribute_setMetaAttribut-Sets (z.B. „Electronics", „Clothing") für Produktgruppen
eav_attribute_groupMetaGruppen innerhalb eines Attribut-Sets (Tabs im Admin)
eav_attribute_optionMetaOptionen für Select/Multiselect-Attribute (Farb-IDs, Größen-IDs)
eav_attribute_option_valueMetaÜbersetzungen der Optionswerte per Store View
catalog_product_entityEntityHaupttabelle für Produkte (SKU, Type, Attribute Set)
catalog_product_entity_varcharWertTextwerte: Name, URL-Key, Meta-Title, Meta-Description
catalog_product_entity_intWertInteger-Werte: Status, Visibility, Farb-Option-IDs
catalog_product_entity_decimalWertDezimalwerte: Gewicht, Spezialpreis-Prozentwert
catalog_product_entity_textWertLange Texte: Beschreibung (description), Kurzbeschreibung
catalog_product_entity_datetimeWertDatumswerte: News from/to Date, Special Price from/to
catalog_category_entity_*WertAnalog zu Produkt-Tabellen für Kategorien
customer_entity_*WertKundendaten: Vorname, Nachname, Geburtsdatum etc.

Konkretes Beispiel: Wie ein Produkt in der EAV-Datenbank aussieht

Nehmen wir an, wir haben ein Produkt mit der entity_id = 42 und wollen herausfinden, wie seine Attribute in der Datenbank gespeichert sind. Das Produkt ist ein T-Shirt mit dem Namen „Classic Tee", Farbe Rot und dem Status „Aktiv":

Abbildung 5: Datenbankinhalt für Produkt ID 42

catalog_product_entity (Basisdaten)
entity_id attribute_set_id type_id sku created_at
42 4 simple TEE-RED-M 2024-01-15 10:23:00
catalog_product_entity_varchar
entity_id attr_id store_id value
42730Classic Tee
42731Classic T-Shirt DE
42970classic-tee
attr_id 73 = name, 97 = url_key
catalog_product_entity_int
entity_id attr_id store_id value
429601
4210204
42134062
96=status(1=aktiv), 102=visibility, 134=color(option_id 62=Rot)
catalog_product_entity_decimal
entity_id attr_id store_id value
428800.3000
attr_id 88 = weight (0.3 kg)

Dieses Beispiel zeigt deutlich, warum EAV für mehrsprachige Shops ideal ist: Der Produktname wird zweimal gespeichert – einmal für den Default Store (store_id = 0) und einmal für die deutsche Store View (store_id = 1). Magento liest beim Frontend-Rendering immer erst den store-spezifischen Wert und fällt auf den Default zurück, falls keiner vorhanden ist.

Vorteile des EAV-Modells

Maximale Schemaflexibilität

Neue Attribute können zur Laufzeit hinzugefügt werden – ohne Datenbankmigrationen oder Ausfallzeiten. Im Magento-Admin: Stores → Attributes → Product.

Native Mehrsprachigkeit

Jedes Attribut kann pro Store View (store_id) einen anderen Wert haben. Übersetzungen sind strukturell im Datenbankmodell verankert, nicht nachträglich gebaut.

Heterogene Produktkataloge

Elektronik benötigt andere Attribute als Kleidung. EAV erlaubt unterschiedliche Attribut-Sets pro Produkttyp ohne Spalten-Explosion oder NULL-Werte in der Datenbank.

Erweiterbarkeit für Module

Drittanbieter-Module können eigene Attribute registrieren, ohne die Kern-Tabellen zu verändern. Die Erweiterung erfolgt allein über Datenbankeinträge und Setup-Scripts.

Attribute Metadata im Zugriff

Validierungsregeln, Frontend-Labels, Input-Types und weitere Metadaten sind direkt in der Datenbank gespeichert und programmatisch zugänglich.

Sparse Data effizient

Wenn ein Produkttyp nur 20 von 200 möglichen Attributen nutzt, werden auch nur 20 Zeilen gespeichert – keine NULLs, keine Speicherverschwendung.

Nachteile und Herausforderungen

Das EAV-Modell ist nicht ohne Kritiker, und die Nachteile sind real. In großen Produktkatalogen können die Performance-Probleme erheblich sein. Wer die Limitierungen kennt, kann aber gezielt dagegen arbeiten.

Performance-Problem durch Multiple JOINs

Eine vollständige Produktabfrage benötigt bis zu 6 JOINs (eine pro Typ-Tabelle). Bei 100.000 Produkten mit 50+ Attributen kann eine einfache Listenabfrage Sekunden dauern. Magento begegnet dem mit dem Flat Table Index.

Fehlende Referenzielle Integrität auf Typebene

Datenbank-Constraints können nicht sicherstellen, dass ein Integer-Attribut nicht in der varchar-Tabelle landet. Die Typsicherheit liegt in der Applikationslogik, nicht in der DB-Ebene.

Komplexe SQL-Abfragen

Native SQL-Abfragen für EAV-Daten sind schwer lesbar und schwer optimierbar. Reporting-Tools haben Schwierigkeiten mit der Struktur. Direktes Debugging der Datenbank erfordert tiefes Systemverständnis.

Hoher Speicherverbrauch

Durch Metadaten, mehrfache Indizes und die Zeilenstruktur kann eine EAV-Datenbank 3–5x mehr Speicher verbrauchen als eine äquivalente Flat-Table-Lösung.

Schwierige Datenmigrationen

Bei Shop-Migrationen (z.B. von WooCommerce nach Magento oder umgekehrt) ist die Zuordnung von EAV-Attributen zu flachen Datenstrukturen aufwendig und fehleranfällig.

SQL-Abfragen mit EAV – Praktische Beispiele

Um die Komplexität von EAV-Abfragen zu verdeutlichen, zeigen wir zwei Beispiele: einmal das Abrufen eines Produktnamens und einmal eine komplexe mehrattributige Abfrage.

Beispiel 1: Einzelnen Attributwert abrufen

Beispiel 2: Produkte mit mehreren Attributen abrufen

Beispiel 3: Attribut per PHP API abrufen (Magento 2 Model-Weg)

Das Beispiel zeigt einen wichtigen Vorteil der Magento-Abstraktion: Die Applikation muss die komplexen EAV-JOINs nicht manuell schreiben. Der Magento ORM (Varien_Db_Select / Magento\Framework\DB\Select) generiert die entsprechenden SQL-Abfragen automatisch basierend auf dem Attribut-Metadaten.

Flache Tabellen (Flat Tables) als Performance-Lösung

Magento selbst erkennt die Performance-Schwäche des EAV-Modells und bietet als Gegenmaßnahme das Flat Table Indexing an. Dabei werden alle EAV-Attributwerte eines Entity-Types in eine einzige denormalisierte Tabelle zusammengefasst – eine klassische Flat Table.

Abbildung 6: EAV-Daten werden zu Flat Index denormalisiert

catalog_product_flat_1 (generiert für Store View 1)
entity_id sku name status visibility weight color price
42 TEE-RED-M Classic T-Shirt DE 1 4 0.3000 62 29.99
43 LAPTOP-PRO-15 Laptop Pro 15 DE 1 4 2.1000 NULL 1299.00
✅ Eine Tabelle, keine JOINs → maximale SELECT-Performance für Frontends

Der Flat Index wird durch den Magento Indexer nach Produktänderungen aktualisiert (bin/magento indexer:reindex catalog_product_flat)

In modernen Magento-Installationen mit Hyvä Theme und Elasticsearch/OpenSearch werden Flat Tables zunehmend irrelevant, da die Suchmaschine die Produktdaten bereits vorindiziert hält. Dennoch ist das Verständnis des Flat Table Konzepts wichtig für Debugging und Performance-Optimierung.

Fazit und Best Practices

Das EAV-Modell ist in Magento 2 kein Designfehler, sondern eine bewusste Entscheidung für maximale Flexibilität. Es ermöglicht den Betrieb von Shops mit heterogenen Produktkatalogen, nativer Mehrsprachigkeit und modularer Erweiterbarkeit – Anforderungen, die für eine Enterprise-E-Commerce-Plattform fundamental sind. Gleichzeitig erfordert das EAV-Modell ein tiefes Verständnis seiner Funktionsweise, um Performance-Probleme zu vermeiden.

Folgende Best Practices helfen dabei, EAV in Magento optimal einzusetzen:

  • Attribute sparsam anlegen: Jedes neue Attribut erhöht die Join-Komplexität. Nur tatsächlich benötigte Attribute anlegen und regelmäßig ausmisten.
  • Correct Backend Type verwenden: Integer-Werte in Integer-Tabellen, Dezimalzahlen in Decimal-Tabellen. Der falsche Typ erzeugt unnötige Typkonvertierungen.
  • Indexer regelmäßig ausführen: Die Flat Tables und Suchindizes müssen nach Produktänderungen aktualisiert werden. In Produktionsumgebungen auf „Update by Schedule" umstellen.
  • Collections statt direktem SQL: Magento's Collection API generiert optimierte EAV-Abfragen und nutzt Caching. Direktes SQL auf EAV-Tabellen im Frontend vermeiden.
  • Elasticsearch für Filternavigation: Die Layered Navigation sollte immer über den Search-Index laufen, nicht über EAV-Queries direkt auf MySQL.

Mironsoft

Datenbankarchitektur & Magento-Entwicklung

Ihr Magento EAV-Modell optimal gestalten?

Wir analysieren Ihre bestehende Datenbankstruktur, optimieren Ihre EAV-Attribut-Strategie und entwickeln performante Datenbankkonzepte für Ihren Magento-Shop.

Datenbank-Audit

Analyse Ihrer EAV-Struktur, Attribut-Optimierung, Index-Strategie

Performance-Boost

Query-Optimierung, Flat Table Konfiguration, Elasticsearch-Setup

Custom Module

Entwicklung von EAV-Erweiterungen, Custom Attributes, Data Migration

Zusammenfassung: Das Magento EAV-Modell auf einen Blick

Was ist EAV?

Entity-Attribute-Value: Ein Datenbankdesignmuster, das Eigenschaften als Zeilen statt Spalten speichert und maximale Schemaflexibilität ermöglicht.

Wo in Magento?

Produkte (catalog_product), Kategorien (catalog_category), Kunden (customer) und Adressen (customer_address) – alle vier nutzen EAV als Kern.

Hauptvorteil

Neue Attribute zur Laufzeit, native Mehrsprachigkeit per store_id, heterogene Produktkataloge ohne Schemaänderungen.

Hauptnachteil

Performance durch multiple JOINs. Lösung: Flat Table Index für Frontend-Abfragen und Elasticsearch für Filternavigation.