it-swarm.com.de

Fragebogendatenbankdesign - welcher Weg ist besser?

Ich habe EINE lange HTML-Seite, mehrere Sätze von Fragen, die in kleine Abschnitte unterteilt sind (ca. 15 Unterabschnitte auf einer Seite). Die Gesamtzahl der Fragen beträgt ca. 100 Fragen: variiert je nach Eingabe, Multiple-Choice, Kontrollkästchen, Optionsfeldern, Textbereich, und Datei hochladen. Eine Frage kann viele Antworten enthalten, die entweder aus einer Gruppe von Kontrollkästchen, einer Gruppe von Auswahllisten, einer Gruppe von Mehrfachauswahl oder allen zu einer Antwort zusammengefasst werden. Ich dachte, ich würde dieses Datenbankdesign unten verwenden, fand aber kürzlich heraus, dass es doch nicht der gute Ansatz ist.

  1. Ein Kunde konnte nur einen Fragensatz haben: einen Kunden pro 100 Fragen.
  2. Für den alten Ansatz behalte ich keine Frage in der Datenbank, sondern weise sie als Konstante in PHP Codierung stattdessen zu. Das Problem ist, dass ich die Frage in PHP) vergleichen muss Um eine Synchronisierung mit der Antwort in der Datenbank zu erhalten. Wenn eine Frage aus PHP geändert/gelöscht/verschoben worden wäre, würde ich definitiv verloren gehen, um sie mit der Antwort in der Fragebogendatenbank abzugleichen. Bessere Lösung?
  3. Könnte ich mehrere Antworten, die von mehreren Elementen in Form erhalten wurden, als eine Antwort in einem Feld zusammenfassen? Wie kann ich dieses Feld abrufen und zur Kundenanzeige auf dem Formular erneut anzeigen?
  4. Welche Option unten soll ich wählen?

OPTION 1: Alter Ansatz (1 Tabelle)

TABELLE: Fragebogen

  • ID (PK)
  • Kundennummer
  • Status
  • A1
  • A2
  • A3
  • .
  • .
  • .
  • A100

OPTION 2: Neuer Ansatz (2 Tabellen)

TABELLE: Frage

  • QID (PK)
  • Frage (varchar)

TABELLE: Antwort

  • AID (PK)
  • Kundennummer
  • QID (int)
  • Antwort (varchar)

Oder OPTION 3?

15
Modular

Codieren Sie Ihren Fragebogen auf keinen Fall fest. Verwenden Sie eine relationale Datenbank oder XML-Dateien. Ich schlage die folgenden Tabellen vor

  • Questionnaire: Allgemeine Beschreibung des Fragebogens. Titel, Name der Umfrage, Veröffentlichungsdatum des Fragebogens, Version usw.

  • Section: Die Abschnitte, aus denen ein Fragebogen besteht. Nummer des Abschnitts, Abschnittsüberschrift, Beschreibung.

  • Question: Die Fragen, die zu einem Abschnitt gehören. Nummer der Frage, Fragetext, Beschreibung, Fragetyp (Text, Multiple Choice usw.).

  • Question_Choice: Die möglichen Antworten zu einer Frage, die den einzelnen Kontrollkästchen, Optionsfeldern usw. entspricht. Text der Wahl, Wahlnummer, Reihenfolge.

  • Respondent: Die Personen, die die Fragen beantworten. Persönliche Daten, Benutzernummer.

  • Interview: Interviews oder Tests oder Umfragen (abhängig von der Art des Fragebogens), die einem Befragten und einem Fragebogen gehören. Wenn ein Befragter immer nur einen Fragebogen beantworten kann (oder wenn die Umfrage anonym ist), ist diese Tabelle veraltet und kann mit der Tabelle der Befragten zusammengeführt werden. Interviewdatum (oder Testdatum oder Umfragedatum), Interviewer (falls zutreffend).

  • Answer: Antworten zu einem Interview (oder Befragten, siehe oben) und einer Frage. Beantworten Sie Text (für Fragen zum Texttyp) und wählen Sie (für Optionsfelder).

  • Answer_Choice: Auswahlmöglichkeiten, die zu einer Antwort und einer Frage gehören_Wahl, wenn mehrere Auswahlmöglichkeiten aktiviert werden können.

Dies ist ein sehr normalisierter Ansatz. Sie können sich jedoch entscheiden, Auswahlmöglichkeiten zu einer Zeichenfolge zu verketten oder sie als Bitmuster zu speichern oder sie je nach Ihren Anforderungen auf andere Weise zu vereinfachen.

Du brauchst ein paar Tische,

1 - Die Fragen (Fragen-ID, Eingabetyp, sichtbar, Fragetyp, Fragetext, erwartete Antworten ....)

2 - Die Antworten (Frage-ID, Benutzer-ID, Aktivitäts-ID, Antwort ....)

3 - Die Benutzer (Benutzer-ID, Benutzername ......)

4 - Eine Tabelle für eine Frage-/Antwortaktivität (Aktivitäts-ID, Daten/Zeit, Benutzer-ID)

Möglicherweise möchten Sie auch eine Tabelle haben, in der die Fragen angegeben sind, die für jede Aktivität angewendet werden sollen - entweder nach Benutzer gruppiert oder nach einer Fragensammlung. Die Fremd-/Primärschlüssel sind die Spalten, die in mehreren Tabellen denselben Namen haben und indiziert werden sollten.

Wenn Sie diese Struktur verwenden, sollten Sie in der Lage sein, eine Frage oder einen Benutzer hinzuzufügen oder eine Antwort zu ändern, ohne Ihr Schema oder Ihren Präsentationscode ändern zu müssen. Stellen Sie sicher, dass der Präsentationscode zur Laufzeit dynamisch erstellt wird. Sie müssen lediglich einen Datensatz hinzufügen an der richtigen Stelle.

Die anfängliche Entwicklung dieses Ansatzes kann länger dauern als ein fest codierter Ansatz, ist jedoch viel einfacher zu warten, da Sie nur Daten ändern müssen, um das Verhalten zu ändern.

(Ein Tipp: Um Ihre Präsentationsebene zu erstellen, benötigen Sie eine Abfrage, in der die entsprechenden Fragen angezeigt werden. Führen Sie dann eine Schleife durch diese Ergebnismenge und rufen Sie eine Methode zum Rendern auf, um Fragen auf dem Bildschirm zu rendern. Die zu wählenden Methoden sind für die geeignet Präsentation dieser Frage [Textfeld, Radiogruppe usw.])

6
adam f