Ich lerne Rails, und das Ziel meiner Experimente ist es, etwas Ähnliches wie Zoho Creator, Flexlist oder Mytaskhelper zu realisieren, d. h. eine App, wo der Benutzer sein eigenes Datenbankschema und Ansichten erstellen kann. Was ist die beste Strategie, um dies zu verfolgen?
Ich habe etwas über den Entity-Attribut-Wert gesehen, aber ich bin mir nicht sicher, ob es die beste Strategie ist oder ob es in Rails dafür Unterstützung gibt.
Wenn es in Rails ein Tutorial über ein ähnliches Projekt gäbe, wäre es großartig.
Wahrscheinlich ist es nicht der einfachste Stern, um eine neue Sprache und einen neuen Rahmen zu lernen, aber es wäre etwas, was ich wirklich seit langer Zeit vorhabe.
Ihre beste Wette ist MongoDB. Es ist leicht zu erlernen (weil die Abfragesprache JavaScript ist) und es bietet einen schemafreien Datenspeicher. Ich würde ein Dokument für jedes Formular erstellen, das die Struktur des Formulars definiert. Wann immer ein Benutzer die Daten übermittelt, können Sie die Daten in einer generischen Struktur speichern und in einer Sammlung speichern, die auf dem Namen des Formulars basiert. In MongoDB-Sammlungen sind Tabellen identisch, Sie können sie jedoch im laufenden Betrieb erstellen. Sie können auch Indexe erstellen, um die Suche zu beschleunigen.
Das Problem, das Sie zu lösen versuchen, ist einer der primären Anwendungsfälle für dokumentenorientierte Datenbanken, die MongoDB ist. Es gibt mehrere andere dokumentenorientierte Datenbanken, aber meiner Meinung nach hat MongoDB im Moment die beste API.
Geben Sie das MongoDB Ruby Tutorial an und ich bin sicher, dass Sie es ausprobieren wollen .
Verwenden Sie KEINE relationale Datenbank dafür. Das Erstellen von Tabellen im laufenden Betrieb wird miserabel sein und ein Sicherheitsrisiko darstellen, nicht nur für Ihr System, sondern auch für die Daten Ihrer Benutzer. Sie können das direkte Erstellen von Tabellen vermeiden, indem Sie ein komplexes Schema erstellen, das die Formularstrukturen verfolgt, und für jeden Feldtyp würde eine eigene Tabelle benötigt. Schienen macht dies weniger schmerzhaft mit polymorphen Assoziationen, aber es ist definitiv nicht schön.
Die Verwendung eines Dokumentenspeichers wie mongodb oder couchdb wäre der beste Weg, da sie schemalos sind.
Es sollte möglich sein, Datenbanktabellen zu generieren, indem Sie DDL-Anweisungen direkt an den Server senden oder dynamisch eine Migration generieren. Dann können Sie die entsprechenden ActiveRecord-Modelle mit Class.new (ActiveRecord :: Base) do ... end generieren. Im Prinzip sollte das funktionieren, aber es muss mit etwas Sorgfalt gemacht werden. Aber das ist definitiv kein Job für einen Anfänger.
Eine zweite Lösung könnte sein, MongoMapper und MongoDB . Meine Idee ist es, eine Sammlung zu verwenden, um die Zeilen Ihrer Tabelle zu speichern, und da MongoDB schematisiert ist, können Sie einfach Attribute hinzufügen.
Mit EntryAttributeValue können Sie alle Schemadaten in einer bestimmten Anzahl von Tabellen speichern. Die daraus resultierenden Auswirkungen auf die Leistung und Wartungsprobleme sind jedoch möglicherweise nicht lohnenswert.
Alternativ könnten Sie Ihre Daten in XML speichern und ein XML-Schema zum Validieren generieren.
Bei allen "generischen" Lösungen treten Probleme mit Fremdschlüsseln oder anderen Einschränkungen auf, ohne dass Sie diese Validierung vor dem Speichern im Speicher durchführen müssen.
Tags und Links database ruby-on-rails schema