Frage

Ich bin eine Dateneingabe Anwendung schaffen, in dem Benutzer erlaubt den Eintrag Schema zu erstellen.

Meine erste Version dieser nur eine einzige Tabelle pro Eintrag Schema mit jedem Eintrag erstellt eine einzelne oder mehrere Spalten überspannen (für komplexe Typen) mit dem entsprechenden Datentyp. Dies ermöglichte es für „schnelle“ Abfrage (bei kleinen Datenmengen, da ich nicht Index alle Spalten haben) und einfache Synchronisation, in der die Dateneingabe auf mehrere Datenbanken verteilt wurde.

Ich bin nicht ganz zufrieden mit dieser Lösung aber; die einzige positive Sache ist die Einfachheit ... Ich kann nur eine feste Anzahl von Spalten speichern. Ich brauche Indizes für alle Spalten zu erstellen. Ich brauche die Tabelle auf Schemaänderungen neu zu erstellen.

Einige meiner wichtigsten Design-Kriterien sind:

  • Sehr schnelle Abfragen (eine einfache domänenspezifische Abfragesprache verwenden)
  • Schreibt nicht schnell sein
  • Viele gleichzeitige Benutzer
  • Schemen wird oft ändern
  • Schemen könnten viele tausend Spalten enthalten
  • Die Daten-Einträge verteilt und syncronization benötigt werden könnten.
  • Bevorzugte MySQL und SQLite -. Datenbanken wie DB2 und Oracle ist nicht in Frage
  • Verwenden von .NET / Mono

Ich habe Gedanken an ein paar der möglichen Designs, aber keiner von ihnen scheint eine gute Wahl.

Lösung 1:. Union wie Tabelle eine Spalte Typ und eine Spalte von -zulässige pro Typ mit

Dies vermeidet verbindet, wird aber auf jeden Fall viel Platz verwenden.

Lösung 2: Schlüssel / Wert-Speicher. Alle Werte werden als String gespeichert und konvertiert bei Bedarf.

Auch vielen Platz verwenden, und natürlich, ich hasse es, alles auf Zeichenfolge zu konvertieren.

Lösung. 3: Verwenden einer XML-Datenbank oder speichern Werte als XML

Ohne Erfahrung würde ich denke, das ist ziemlich langsam (zumindest für das relationale Modell, es sei denn es eine sehr gute Unterstützung von XPath ist). Ich möchte auch eine XML-Datenbank als andere Teile der Anwendung paßt besser als ein relationales Modell vermeiden und hilfreich die Daten beitreten zu können.

Ich kann nicht zu denken, helfen, dass jemand (einige) dies bereits gelöst hat, aber ich bin nicht in der Lage, etwas zu finden. Nicht ganz sicher, was für beide ...

suchen

Ich weiß, Marktforschung ist für ihre Fragebogen so etwas wie dies zu tun, aber es gibt nur wenige Open-Source-Implementierungen, und die, die ich gefunden habe, nicht ganz passen die Rechnung.

PSPP hat viel von der Logik der ich denke; viele Spalten, viele Zeilen, schnelle Abfragen und Verschmelzen primitive Spaltentypen. Schade, dass es nicht funktioniert gegen eine Datenbank .. Und natürlich ... Ich brauche nicht 99% der bereitgestellten Funktionalität, aber viele Sachen nicht enthalten.

Ich bin nicht sicher, dann ist dies der richtige Ort zu fragen, eine solche Konstruktion in Zusammenhang Frage, aber ich hoffe, dass jemand hier einige Tipps hat, weiß jeder vorhandenen Arbeit, oder kann mich zu einem besseren Ort zeigen, eine solche Frage zu stellen.

Vielen Dank im Voraus!

War es hilfreich?

Lösung

Haben Sie schon die banalsten Lösung in Betracht gezogen: eine Tabelle für jede Ihrer Datentypen mit und das Schema Ihres Datensatz in der Datenbank zu speichern als auch. Einfachste Lösung:

DATASET Table (Virtual "table")
ID - primary key
Name - Name for the dataset/table

COLUMNSCHEMA Table (specifies the columns for one "dataset")
DATASETID - int (reference to Dataset-table)
COLID - smallint (unique # of the column)
Name - varchar
DataType - ("varchar", "int", whatever)

Row Table 
DATASETID
ID - Unique id for the "row"

ColumnData Table (one for each datatype)
ROWID - int (reference to Row-table)
COLID - smallint
DATA - (varchar/int/whatever)

einen Datensatz abzufragen (eine virtuelle Tabelle) müssen Sie dann konstruieren dynamisch eine SQL-Anweisung der Schemainformationen in COLUMNSCHEMA Tabelle.

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