2010-11-18 7 views
3

Ich hatte Entity Attribute Value in vielen Kontexten gesehen, bevor ich tatsächlich erfuhr, wie sein Name war. Es ist diese Technik, die oft auftritt, wenn Sie statt Daten in Datenbankspalten "spiegeln" und eine Tabelle mit den Spalten Entity, Attrbute, Value haben und jedes Datenelement zu einer Zeile in dieser Tabelle wird. Manchmal ist es auch als 'Open-Schema' bekannt.Entitätsattributwert (EAV) Frameworks?

Es ist gut für einige Dinge, schlecht für andere Dinge. Diese wikipedia article hat eine gute Diskussion der Theorie dahinter.

Es scheint die Art von oft verwendeten Technik, die Frameworks oder Engines oder NoSQL-Datenbanken oder allgemeine Software-Tools haben sollte, um es zu bauen und zu unterstützen.

Also, kennen Sie irgendwelche? Besonders interessiert mich der Microsoft-Stack (.Net, SQL Server, etc.), aber auch andere Technologie-Stacks.

Zum Beispiel, hier ist ein Projekt zu build an ASP.NET EAV engine das ist genau das, was ich suche, aber anscheinend nie begonnen hat.

Antwort

6

Wenn Sie mit den Nachteilen von NoSQL-Datenbanken leben können, ist die beste Möglichkeit, das EAV-Muster zu erreichen, eine NoSQL-Alternative wie CouchDB oder MongoDB. Diese Datenbanken bieten einen "schemalosen" Entwurf, der es jeder Reihe erlaubt, ein eigenes Schema zu haben. Eine EAV mit einem traditionellen RDBMS zu erstellen, verlangt nach Problemen, da die Abfrage sehr schwierig wird und die Leistung leidet, je größer der Datensatz ist.

Eine Alternative, die ich in der Vergangenheit erfolgreich verwendet habe, ist die Kombination eines RDBMS mit einer NOSQL-Variante (MySql und MongoDB). Ich verwende MySQL, um die EAV-Daten zu speichern (um die Transaktionsintegrität zu erhalten), und ich verwende MongoDB als Berichtsspeicher, um die Abfrageprobleme mit dem EAV-Modell zu umgehen.

0

Ich werde den Ball bekommen mit einem Roll ich über this blog post gefunden:

Eine frühe Beta für einen SQL Server EAV Rahmen:

http://eav.codeplex.com/
„Eine Probe EAV Muster für SQL Server mit: Tabellen und Indizes, partielle referentielle Integrität, partielle Datentypisierung, aktualisierbare Ansichten (wie normale SQL-Tabelle) "

Bietet einige SQL-Skripts zum Herunterladen, here.

1

Sie könnten es in SQL-XML speichern, donno einer lib tho, aber Sie könnten die de/serialisierung in .NET tun, dann X-LINQ aginst es.

Leistung wird auch ein enormes Problem offensichtlich sein.