2008-10-22 6 views
22

Gibt es ein Entity Attribute Value Framework für PHP/MySQL? Ich fange an, mein eigenes zu schreiben, aber ich fühle mich wie es schon gemacht wurde. Irgendwelche Vorschläge?Gibt es ein Entity Attribute Value (EAV) Framework für PHP/MySQL?

+0

Ich weiß nichts. Gute Frage! – Till

+0

Die Tatsache, dass diese Frage die höchste Google-Seite für den Begriff "Entity Attribute Value Framework" ist und die Seite nur 8 Stunden alt ist würde vorschlagen, dass Sie kein Glück haben. Das heißt, wenn Sie etwas wie das Zend Framwork verwenden würden, könnten Sie einfach die abstrakte Klasse Zend_DB_Table erweitern. –

+0

@Andrew Ich glaube, dass Ihre Google-Suche von Ihrem Standort oder Suchverlauf beeinflusst werden kann. Für die gleiche Suche sehe ich keinen Stackoverflow in den Top 100 Ergebnissen. Eine Google-Suche gibt keine einzige Ergebnisseite mit objektiven Daten mehr. Es scheint in gewisser Weise unvermeidlich subjektiv zu sein. – Liam

Antwort

3

Ich denke, Magento nutzt eine EAV-Stil-Architektur, könnte es wert sein, einen Blick hinein. Magento ist eine E-Commerce-Plattform, die auf dem Zend Framework basiert.

1

ich nicht von jedem wissen.

Mit diesem gesagt, die eZ Publish ECMS (die FOSS ist) verwendet ein EAV-style, stark normalisierten Datenmodell. Sowohl Definitionen von strukturierten Inhaltstypen ("content classes") als auch tatsächliche Inhaltsinstanzen (Artikel, Benutzerkonten, Kommentare, Produkte, alles wirklich) werden definiert und in einzelnen Datenbanktabellen gespeichert.

Auf diese Weise können beliebige Kombinationen von Datentypen dynamisch über die Webschnittstelle zu einem neuen Inhaltstyp kombiniert werden (ein "simplearticle" könnte aus einer "Textzeile" für Überschrift, "Datetime" für Veröffentlichungsdatum und "XML-Feld" bestehen) "für Körpertext). In EAV ist "simplearticle" die Entität, "headline" ein Attributname und "Textline" sein Wert, während die Längen- und Validierungsregeln, die den "Textline" -Datentyp umfassen, Metadaten im EAV-Kontext sind.

Wie bei jeder EAV-Architektur zu erwarten, geht diese Flexibilität auf Kosten der Leistungsreduzierung, da für jede Suche mehrere Self-Joins erforderlich sind, einer für jede Spalte im geschalteten Ergebnissatz.

Leider hat dieser Stapel es nicht in die zugehörige eZ Components Bibliothek geschafft (die Datenbank- und Datenzugriffsobjekt/ORM-Komponenten hat, aber der relationalen Standard-Variante), also würde es bedeuten, entweder mit dem gesamten eZ Publish zu arbeiten Enchilada oder rippen die erforderlichen Klassenbibliotheken selbst aus.

+0

das klingt schrecklich für die Leistung, wenn auch flexibel - vielleicht sogar zu viel. – Keyframe

+0

Es * ist * schrecklich für die Leistung. eZ Publish macht mehrere Caching-Ebenen, um dies durchführbar zu machen (die "Inhaltsklassen" und der Inhalt selbst werden erst nach der Änderung von der Datenbank neu gelesen/verbunden), aber immer noch langsamer als eine relationale Struktur oder ein systemeigener Objektspeicher wie BigTable. – joelhardi

+1

"EAV-Stil" und "normalisiert" sind Antonyme. –