memoryn dynamischer properties von objecten in SQL

Ich versuche, "dynamische" properties über objecte in SQL zu speichern. objs wir als Beispiel eine Tabelle namens objs , die zwei Spalten ( id , name ) hat. Jetzt möchten einige Benutzer möglicherweise eine Eigenschaft namens hocus speichern, während andere möglicherweise eine Eigenschaft namens pocus (oder sogar banana ) speichern möchten. Alles wirklich.

Mein Gedanke ist, zwei Tabellen, props und obj_props zu erstellen. props hätten zwei Spalten ( id und prop_name ) und obj_props hätte ( obj_id , prop_id und value ).

Meine einzige Sorge ist, dass dies eine Menge Overhead ist, wenn es Millionen von objecten mit jeweils 20-30 properties gibt. Ich weiß, ich könnte einen Index in obj_props auf obj_id und prop_id aber wird das immer noch gut prop_id ? Gibt es eine bessere Lösung für so etwas? Ich betrachte MongoDB, aber das Fehlen von Joins ist frustrierend.

Solutions Collecting From Web of "memoryn dynamischer properties von objecten in SQL"

Dies wurde bereits wiederholt diskutiert:

  • Dieser Beitrag von DBA.stackexchange.com
  • Dynamische Tabellenspalten basierend auf Benutzereinstellungen
  • Sollte ich EAV-Werte in eine datatyp-Tabelle platzieren?
  • Wie viele ähnliche Attribute einer Entität in einer database darstellen?
  • databasedesign – Soll ich 30 Spalten oder 1 Spalte mit allen data in Form von JSON / XML verwenden?
  • Was ist die maximale Anzahl von Spalten in einer PostgreSQL-Auswahlabfrage?

Die kurze Version: EAV hat seinen Platz, aber es ist oft besser, json , XML oder hstore . Der erweiterte json PostgreSQL 9.4 wird wahrscheinlich die attraktivste Wahl sein, da er die Vorteile von json und hstore .

Zunächst sollten Sie mit einem geeigneten databaseschema beginnen (unter Verwendung von Standarddatenmodellmustern), um dies so weit wie möglich zu vermeiden.

Martin Fowler empfiehlt, entweder ein serialisiertes LOB (wie JSON oder XML) zu verwenden oder dem Benutzer zu erlauben, sein eigenes databaseschema zu bearbeiten (was meine bevorzugte Methode ist):

http://martinfowler.com/bliki/UserDefinedField.html

Bill Karwin hat irgendwo einen Beitrag zum Erstellen einer zweiten Tabelle, um Werte im Blob-Feld zu indizieren, aber ich kann es jetzt nicht finden. Wird posten wenn ich es mache.