In der Schlussfolgerung zu Teil 2 dieser Artikelserie erwähnte ich, dass ich erweiterte Funktionen hinzufügen würde, wie zum Beispiel:
- Bedingte Reihenfolge der Fragen in einer Umfrage bzw. die Möglichkeit eines bedingten Pfades durch die Umfrage
- Verwaltung der Umfrage
- Berichte und Analysen
In diesem dritten Artikel geht es um eine Online-Umfrage , werde ich die Funktionalität erweitern, um die bedingte Reihenfolge von Fragen zu unterstützen.
In Zukunft werden wir möglicherweise Fragen hinzufügen, die eine bewertete Antwort erfordern. Zum Beispiel:„Wie sehr gefällt Ihnen das Datenbankdesign, bewerten Sie zwischen 1 und 100 (wobei 1 angibt, dass es Ihnen sehr gefällt, und 100 angibt, dass es Ihnen sehr gefällt)?“
Bedingter Pfad
Wir möchten bestimmte Bedingungen für die Fragen festlegen, die dem Benutzer basierend auf Benutzerantworten präsentiert werden. Wenn die Antwort auf Frage 4 beispielsweise „Ja“ lautet, stellen wir Frage 5 und überspringen Frage 6; Wenn die Antwort auf Frage 4 "nein" lautet, überspringen wir Frage 5 und stellen Frage 6).
Wir müssen also definieren, welche Fragen bedingt sind und wie Fragen basierend auf der Antwort auf eine Frage „übersprungen“ werden.
Um den bedingten Pfad einfach zu halten, werden wir zunächst keine Bedingungen zulassen, die auf Multiple-Choice-Fragen basieren, sondern nur für polare (Ja oder Nein) Fragen. Das Design kann erweitert werden, um bedingte Pfade basierend auf Multiple-Choice-Fragen zu unterstützen, aber das ist komplexer und ich möchte einfach beginnen.
Es ist wichtig, dass die Anwendung diesen Ablauf für jede Frage überprüft, da die Antwort auf eine vorherige Frage den Ablauf für die aktuelle Frage bestimmen kann (um eine Frage basierend auf einer vorherigen Antwort zu überspringen).
Verwaltung &Berichte
Wir werden vorerst keine Administratoren der Online-Umfragen hinzufügen, behalten dies aber für die nächste Erweiterung bei.
Es müssen einige Berichte und Analysen vorhanden sein; Ich werde dies jedoch für die nächste Version beibehalten, da ich zuerst einige Informationen speichern möchte, um später Analysen durchzuführen.
Entitäten und Beziehungen
Für den bedingten Pfad durch die Umfrage erweitere ich die question_order
die für jede Umfrage definiert wird und die Umfrage mit den Fragen verknüpft. Wie bereits erwähnt, vorerst der bedingte Sprung wird nur auf polaren Fragen basieren, also kann ich die nächste Frage definieren, die im Falle einer positiven Antwort angezeigt wird, und die nächste Frage, die im Falle einer negativen Antwort angezeigt wird.
Formales Design
Lassen Sie uns die ERD erweitern, die in Teil 1 erstellt wurde dieser Artikelserie.
Ich füge conditional_order
hinzu verknüpft mit question_order
; Wie ich bereits erwähnt habe, werde ich nur eine bedingte Reihenfolge durch die Umfrage basierend auf polaren Fragen unterstützen. Nun, es gibt ein paar Möglichkeiten, wie dies implementiert werden kann. Meine Bedürfnisse sind einfach, also werde ich mich für eine einfache Implementierung entscheiden. Wenn Ihre Anforderungen komplexer sind, benötigen Sie eine komplexere Lösung.
Es wäre schön, nur die „nächste“ Frage basierend auf der Antwort auf die aktuelle Frage zu definieren, aber das erlaubt uns nicht, später in der Umfrage eine Frage zu überspringen, also brauchen wir mehr Flexibilität.
Eine Möglichkeit besteht darin, anzugeben, wie viele Fragen bei einer positiven Antwort und wie viele bei einer negativen Antwort vorzugehen sind; allerdings muss ich angeben, für welche Frage der Sprung gilt und die Antwort auf welche Frage verwendet werden soll. Um mein Beispiel zu untermauern:Wenn die Antwort auf Frage 4 „Ja“ lautet, stellen wir Frage 5 und überspringen Frage 6. Wenn die Antwort auf Frage 4 „Nein“ lautet, überspringen wir Frage 5 und stellen Frage 6 – Dies erfordert zwei Einträge, die beide die Antwort auf Frage 4 prüfen, einen, der eine Frage weitergeht (wie üblich) und einen, der zwei Fragen vorspringt (um eine Frage zu überspringen), und die andere Bedingung, die nach der Beantwortung von Frage 5 geprüft werden muss, wodurch die Frage übersprungen wird 6.
+-------------------+----------------------+------------------------+------------------------+ | question_order_id | response_to_question | positive_response_jump | negative_response_jump | +-------------------+----------------------+------------------------+------------------------+ | 4 | 4 | 1 | 2 | +-------------------+----------------------+------------------------+------------------------+ | 5 | 4 | 1 | null | +-------------------+----------------------+------------------------+------------------------+
Alternativ kann die ID der nächsten Frage angegeben werden, zu der die Umfrage bei einer bestimmten Antwort springen soll:nächste Frage bei positiver Antwort und nächste Frage bei negativer Antwort Antwort. Dieser Ansatz hat Vor- und Nachteile. Es würde Schleifen zulassen, die ein Administrator möglicherweise nicht bemerkt. Schleifen können jedoch ein gewünschter Effekt sein, damit Sie die letzte Frage stellen können, ob der Befragte mit der Umfrage fertig ist, und wenn er mit „Nein“ antwortet, dann zur ersten Frage zurückkehren. Darüber hinaus können die Fragen, zu denen im Falle einer positiven oder negativen Antwort gesprungen werden soll, als Fremdschlüssel zu der für die Umfrage festgelegten Fragenreihenfolge eingerichtet werden, sodass wir sicher wissen, dass die angegebene Frage in der Umfrage definiert ist. Dies ist eine nette Check-in-Logik, die durch referentielle Integrität implementiert wird. Ich denke, dass dies wahrscheinlich die bessere Lösung ist, also finden Sie das in der ERD.
Um mein Beispiel zu untermauern:Wenn die Antwort auf Frage 4 „Ja“ lautet, stellen wir Frage 5 und überspringen Frage 6. Wenn die Antwort auf Frage 4 „Nein“ lautet, überspringen wir Frage 5 und stellen Frage 6.
Wie bereits erwähnt, haben wir zwei Zeilen:
Survey #1, question #4, response to question #4, positive response: next question order id = 5, negative response: next question order id = 6.
Survey #1, question #5, response to question #4, positive response: next question order id = 7. We will never get to question #5 if the response to question #4 was negative, so we always skip question #6 after asking question #5.
+--------+----------+----------------------+-------------------------------+-------------------------------+ | survey | question | response_to_question | positive_response_question_id | negative_response_question_id | +--------+----------+----------------------+-------------------------------+-------------------------------+ | 1 | 4 | 4 | 5 | 6 | +--------+----------+----------------------+-------------------------------+-------------------------------+ | | 5 | 4 | 7 | null | +--------+----------+----------------------+-------------------------------+-------------------------------+
Beim Einrichten der Bedingung verwenden wir einen Fremdschlüssel (nicht obligatorisch), um sicherzustellen, dass die nächste Frage vorhanden ist. Ein Nullwert wird für einen nicht möglichen Pfad verwendet oder, wenn keine nächste Frage angegeben ist, um die Umfrage bedingt zu beenden.
Ich habe die Tabellen, die in Teil 1 erstellt wurden, koloriert der Artikelserie in gelb , die in Teil 2 hinzugefügten Tabellen in Orange und die neu hinzugefügte Tabelle in Grün , damit die Hinzufügungen besser zu sehen sind.
Schlussfolgerung
Keine der beschriebenen Lösungen zur Verwaltung bedingter Schritte durch eine Umfrage ist das ultimative regelbasierte System, aber eines meiner Ziele ist es, die Dinge einfach und unkompliziert zu halten. Flexibilität zulassen, ohne Dinge in Komplexität zu überwältigen. Und, ich wiederhole mich, Sie haben vielleicht andere Anforderungen. Identifizieren Sie Ihre Anforderungen; implementieren oder anpassen, was Sie brauchen. Ich glaube fest an Wiederverwendung und nicht daran, das Rad neu zu erfinden.
Jetzt haben wir mit der Umsetzung der Verbesserungen begonnen, die in Teil 1 und 2 dieser Artikelserie besprochen wurden.
In den nächsten Artikeln werde ich Unterstützung für diese Funktionen hinzufügen:
- Verwaltung der Umfragen
- Berichte und Analysen