Frage

Ich habe für eine Datenbank-Lösung gesucht, benutzerdefinierte Felder und Werte (erlaubt eine unbegrenzte Anzahl) zu ermöglichen. Auf den ersten Blick schien EAV wie die richtige Passform, aber nach einiger Lektüre sicher, ich bin nicht mehr.

Was sind die Vor- und Nachteile der EAV?

Gibt es eine alternative Datenbankmethode benutzerdefinierte Attribute / Felder und Werte ermöglichen?

War es hilfreich?

Lösung

Dies ist keine erschöpfende Antwort, aber nur ein paar Punkte zum Thema berücksichtigt werden.

Da die Frage auch mit dem [sql] Tag markiert ist, lassen Sie mich sagen, dass im Allgemeinen relationalen Datenbanken ist nicht besonders geeignet für die Daten unter Verwendung des EAV Modells zu speichern. Sie können immer noch ein EAV-Modell in SQL entwerfen, aber Sie werden viele Vorteile opfern müssen, die eine relationale Datenbank geben würde. Nicht nur werden Sie nicht in der Lage sein, die referenzielle Integrität zu erzwingen, SQL-Datentypen für Werte verwenden und obligatorische Attribute erzwingen, aber auch die sehr einfachen Abfragen schwierig werden können zu schreiben. In der Tat, diese Einschränkung zu überwinden, setzen mehrere EAV-Lösungen auf Datenduplizierung, statt mit verknüpften Tabellen beizutreten, die, wie Sie sich vorstellen können, viele Nachteile hat.

Wenn Sie wirklich einen schemaless Entwurf fordern, „eine unbegrenzte Anzahl von Attributen ermöglicht“, Ihre beste Wette ist wahrscheinlich ein NoSQL Lösung. Auch wenn die Schwächen der EAV in Bezug auf relationale Datenbanken auch auf NoSQL Alternativen anwenden, werden Sie zusätzliche Funktionen angeboten, die nur schwer mit herkömmlichen SQL-Datenbanken zu erreichen. Zum Beispiel kann in der Regel NoSQL-Datastores skaliert werden viel einfacher als relationale Datenbanken, nur weil sie eine Art von Skalierbarkeit Problem zu lösen entwickelt wurden, und sie fallen gelassen absichtlich Features, die schwierig zu skalieren.

Viele Cloud-Computing-Plattformen (wie jene, angeboten von Amazon , Google und Microsoft ) ist mit Datenspeichern auf der Basis des EAV-Modell, wo eine beliebige Anzahl von Attributen kann mit einer gegebenen Einheit zugeordnet sein. Wenn Sie erwägen, Ihre Anwendung in der Cloud bereitstellen, können Sie dies berücksichtigen sowohl als Geschäftsvorteil, sowie eine technische Frage, weil die starke Konkurrenz zwischen den großen Anbietern wird der Value-to-Cost-Verhältnisse drängen auf ein sehr hohes Niveau, durch kontinuierliches Hochschieben auf die Merkmale und drückt die Finanz- und Implementierungskosten nach unten.

Andere Tipps

Hier finden Sie aktuelle posgtres hstore http://www.postgresql.org/ docs / 9.0 / static / hstore.html dies wird genau das tun, was Sie ohne die meisten Nachteile wollen

Die Streams Platform schlägt die alternative Art und Weise basierend auf Streams ( wirklich, es ist das Domain Model ), Felder und Zuordnungen Einheiten.

  

Gibt es eine alternative Datenbankmethode benutzerdefinierte Attribute / Felder und Werte ermöglichen?

Eine Alternative ist das Datenbankschema, basierend auf Benutzereingaben zu ändern:. Zum Beispiel, wenn der Benutzer ein neues Feld will, dann eine entsprechende Spalte der Datenbank hinzufügen

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top