2017-07-05 2 views
0

So speichern Sie Daten aus dynamischen Formularen mit Mehrfachauswahlfeldern.DB Design zum Speichern dynamischer Formulardaten mit Mehrfachauswahlfeldern

Ich habe verschiedene Post gelesen und alle Beispiel hat nur Listenschlüssel, Werteingabe. Aber wenn das Formular Multi-Select-Eingabe hat. Was ist der beste Weg, um die Daten zu speichern? Ich suche keine NoSQL-Lösung.

aktuelle Design

forms 
----- 
    id (PK) 
    name  
    (other fields) 

form_elements 
------------- 
    id (PK) 
    form_id (FK to forms.id) 
    element_type_id (FK to element_types.id) 
    name 
    list_group (nullable, it will be related only for multiselect inputs)  
    (other fields) 

element_types 
------------- 
    id (PK) 
    name 

list_values 
------------------- 
    id (PK)  
    value 
    group 
    (other fields??) 

Formtisch Abtastdaten

| form_id | form_name | 
|:-------:|:---------------:| 
| 1 | Enquiry Form | 
| 2 | Test Drive Form | 
| 3 | Feedback Form | 

Form_elements Probe

| id | form_id | element_type_id | name | list_group | 
|:--:|:-------:|:---------------:|:---------:|:-------:| 
| 1 | 1 |  1  | firstName |   | 
| 2 | 1 |  1  | LastName |   | 
| 3 | 1 |  2  | color | color| 

element_types

| id | name | 
|:--: |:--------: | 
| 1 | text | 
| 2 | checkbox | 
| 3 | radio | 

list_values ​​Beispieldaten

| id | value  | group  | 
|:--: |:-----: |------- | 
| 1 | red  | color  | 
| 2 | blue  | color  | 
| 3 | green  | color  | 
| 4  | Dell  | brand  | 
| 5  | HP  | brand  | 

Probe json posted

{ 
    "firstName": "john", 
    "lastName": "Doe", 
    "color": "red" 
} 

form_submit Tabelle die folgenden Zeilen

| form_id | Column_id  | value  | 
|:-------: |:---------: |:-----: | 
| 1  |  1   | John  | 
| 1  |  2   | Doe  | 
| 1  |  3   | Red  | 
| 1  |  1   | James  | 
| 1  |  2   | Smith  | 
| 1  |  3   | Blue  | 

wenn die dynamische Form geschrieben Multi haben wählen Sie die Option Probe json hat wird

{ 
    "firstName": "John", 
    "lastName": "Doe", 
    "color": [ 
    "red", 
    "green", 
    "blue" 
    ] 
} 

Wie speichern Sie diese Daten.
Müssen wir es in derselben form_submit-Tabelle speichern. oder speichern in verschiedenen Tabelle

+0

Für welchen Zweck speichern Sie es? Soll es in ein anderes System hochgeladen oder darüber berichtet werden? Wenn es zu berichten gibt, welche Art von Berichten sind sie? Brauchst du einen Bericht, der all die Leute zählt, die grün gewählt haben? Oder ist es nur eine Kopie davon, was die Leute ausgesucht haben? Oder haben Sie eine Logik, die Antworten übergeht und Noten zuordnet? –

+0

Sie haben keine Einschränkungen beschrieben, die uns dabei helfen könnten, zu entscheiden, ob Sie den JSON einfach so stopfen können oder ob Sie eine Bridge-Tabelle erstellen sollen, die eine Viele-zu-viele-Beziehung definiert. Der "richtige" normalisierte Weg besteht darin, eine Bridge-Tabelle zu erstellen, aber wir kennen Ihre Einschränkungen nicht. –

+0

@ Nick.McDermaid müssen wir die Rohdaten herunterladen/an ein anderes System anschließen. Auch möchten wir Berichte haben, wie die Anzahl der Farben ausgewählt etc. Wir verwenden ms sql server 2014./Frühling MVC. Ich möchte nicht in JSON speichern. Ich speichere lieber in Tabellen für komplexe Abfragen. Also ich suche ein bestes DB-Design um dies zu unterstützen – Mukun

Antwort

0

Erstens ... Ich muss warnen, dass dynamische Schemas wie diese in der Regel eine schlechte Idee sind.

Zweitens scheint es, dass Ihre form_submit nur einen Satz von Antworten speichern kann

Ich Annahmen hier machen - es ist nicht klar, ob Sie mehrere Sätze oder nicht, aber es wäre sinnvoll unterstützen müssen, wenn es getan hat.

Also zuerst lassen Sie uns form_submit erweitern, um mehrere Sätze von Fragen von verschiedenen Leuten zu unterstützen. Wir fügen eine Spalte submit_id hinzu. Dies ist die Instanz eines Fragebogens (Fragengruppe), den jemand beantwortet.

submit_id form_id Column_id value 
    1   1  1  Block 
    1   1  2  Rough 
    1   1  3  Red 
    2   1  1  Cylinder 
    2   1  2  Smooth 
    2   1  3  Blue 

Jetzt wissen wir, dass submit_id = 1 ist eine Reihe von Fragen, die von einer Person und submit_id beantwortet = 2 ist eine weitere andere Fragen von einem anderen beantwortet

Vielleicht möchten Sie einen Header einreichen erstellen, die beschreibt, dies:

submit_id  form_id submit_datetime   submit_by 
    1    1  2017-07-06 09:37:00  Fred 
    2    1  2017-07-02 07:31:00  Fred 

Jetzt können wir eine Tabelle erstellen, sagen multiselect, die wir die Beziehung zwischen vielen möglichen Fragen und vielen möglichen multiselects

lassen definieren
submit_id column_id list_value_id 
    1   3   1 (red) 
    1   3   2 (blue) 
    1   3   3 (green) 
    2   3   4 (dell) 

Diese Reihe von Zeilen sagt uns, dass Fragebogen 1 eine Multiselect auf Spalte 3 hatte und sie rot, blaugrün ausgewählt.

Questionaire 2 hatte eine Mehrfachauswahl auf Spalte 3, und sie nahm nur Dell

Sie brauchen nicht einmal eine Zeile in der Tabelle form_submit dafür. Es hängt davon ab, was sonst dein form_submit speichert.

Das ist nur ein Weg, es zu tun. Aber es ist wirklich diktiert von Ihren Geschäftsprozessen, Beziehungen zwischen Entitäten, wie Sie Daten ein- und auslesen wollen usw. Sie möchten vielleicht quer über die Datenmodelle von Fragebögen online recherchieren, weil dies nichts Neues ist.

Ich vermute, dies kann nur dazu führen, mehr Fragen, aber lassen Sie es zuerst versuchen

+0

Ich dachte auch ähnlich für DB Design One Table (form_submit), um Schlüsselwertfelder und ein anderes (Multiselect) zu speichern, um Multi-Select-Felder zu speichern. Aber ich versuche, die Java-Entitäten zu visualisieren. und wie würde ich sie beharren und abrufen – Mukun

+0

, dass ich nicht mit Entschuldigung helfen kann –

Verwandte Themen