Zurück zum Blog

Magento's Datenbank-Model

Für Entwickler von Magento-Modulen ist es unerlässlich, die zugrunde liegende Datenbankstruktur und das von Magento verwendete EAV-Model (Entity-Attribute-Value) zu verstehen.

Magento verwendet für Entitäten, also Objekte, eigene Model-Klassen (z.B. Produkte oder Kunden). Jedes dieser Models beinhaltet wiederum Methoden und Attribute (Eigenschaften). Allerdings ist es so, dass Magento die Daten unterschiedlich speichert: Entweder in flachen Tabellen oder eben in EAV-Tabellen. Beispielsweise werden für Produkte EAV-Tabellen verwendet, für Bestellungen wiederum sind flache Tabellen im Einsatz. Doch wo ist nun der Unterschied (man kann sich nämlich beider Modul-Programmierung für eine der beiden Varianten entscheide

EAV-Tabellen

Bei Verwendung des EAV-Schemas, hat man den Vorteil, dass sich die Datenbanktabellen mit einem einzigen Befehle anlegen lassen, ohne dabei auf SQL-Statements zurückgreifen zu müssen. Weiters wird jedes Attribut durch eine eigene Attribut-Model-Klasse repräsentiert. Somit ist es möglich, für das jeweilige Attribut weitere Informationen bereitzustellen bzw. das Rendering zu beeinflussen. Weiters können mittels so genannten Source-Model-Klassen, das sind Unterklassen der Attribut-Model-Klasse, Optionen für Attribute bereitgestellt werden (z.B. Werte für eine Selectbox).

Die Möglichkeiten die das EAV-Schema mit sich bringt haben jedoch auch Nachteile: EAV macht sich durch schlechtere Performance und höheren Speicherverbrauch bemerkbar. Da die Informationen zu einem Attribut über mehrere Tabellen hinweg gespeichert werden, sind umfangreiche Datenbankoperationen notwendig. Auch die Instanzierung der vielen benötigten PHP-Objekte wird zum Ressourcenfresser und fordert somit leistungsstarke Server.

Flache Tabellen

Die so genannten „Flat Tables“ sind dagegen performanter, da die Datenbankstruktur einfach gehalten ist und somit weniger oder keine Joins durchgeführt werden müssen. Hinzu kommt, dass man als Entwickler die Struktur der Datenbank einfacher versteht, da diese beim EAV-Model oft schwer zu durchblicken ist. Ebenso müssen weniger PHP-Objekte instanziert werden.

Allerdings ist beim Einsatz von flachen Tabellen mehr Entwicklungsarbeit notwendig. Beim EAV-Schema wird z.B. die Aufbereitung und Validierung der Daten automatisch vorgenommen, bei flachen Tabellen muss diese Arbeit jedoch vom Programmierer durchgeführt werden. Weiters fehlen bei flachen Tabellen diverse Meta-Informationen, wie etwa ob ein Attribut ein Pflichtfeld ist oder nicht – bei EAV sind diese Informationen von Haus aus vorhanden.

Was soll man nun einsetzen?

Da die Geschwindigkeit eines Online-Shops ein entscheidender Erfolgsfaktor ist, und Magento sowieso keine Vorbild in Sachen Performance ist, sollten meiner Meinung nach in vielen Fällen die flachen Tabellen bevorzugt werden. Um die Entscheidungsfindung einfacher zu machen, hat Vinai Kopp im PHP Magazin (Ausgabe 2.11, Seite 96) folgende Fragen / Aussagen aufgestellt:

  • Wieviele Attribute hat die Entität? Viele Attribute verlangsamen EAV noch mehr.
  • Wenn im Frontend komplexe Berechnungen für die Entität benötigt werden, dann sollten Flat Tables genommen werden.
  • Kommen häufig neue Attribute dazu? Mit EAV sind diese einfacher hinzuzufügen.
  • Bei mehr als 2000 Datensätzen sollten flache Tabellen verwendet werden.
  • Werden komplexe Backend-Formulare benötigt? Das funktioniert mit EAV etwas weniger gut.

Bei Google Books sind übrigens Teile des Kapitels „Models und Resource-Models“ aus dem Buch „Magento – Das Handbuch für Entwickler“ abzurufen. Darin finden sich weiterführende Informationen zur Datenbankstruktur von Magento und zum Entity-Attribute-Value-Model.

Diesen Artikel teilen

Schreiben Sie den ersten Kommentar zu diesem Artikel

Ihr Kommentar

Bitte geben Sie Ihren Namen an
Bitte geben Sie eine E-Mail Adresse an
Bitte geben Sie eine Nachricht ein
Das Ergebnis ist nicht korrekt