Database
 sql >> Database >  >> RDS >> Database

Un modello di database per un sondaggio online. Parte 3

Nella conclusione della Parte 2 di questa serie di articoli, ho detto che avrei aggiunto funzionalità più avanzate, come:

  • Ordine condizionato delle domande in un sondaggio o, in altre parole, la possibilità di un percorso condizionato attraverso il sondaggio
  • Amministrazione del sondaggio
  • Rapporti e analisi

In questo terzo articolo relativo a un sondaggio online , estenderò la funzionalità per supportare l'ordinamento condizionale delle domande.

In futuro, potremmo aggiungere domande che richiedono una risposta valutata. Ad esempio:"Quanto ti piace la progettazione del database, valuta tra 1 e 100 (con 1 che indica che ti piace molto poco e 100 che indica che ti piace immensamente)?"

Percorso condizionale

Vogliamo impostare determinate condizioni sulle domande presentate all'utente in base alle risposte degli utenti. Ad esempio, se la risposta alla domanda 4 è "sì", allora poniamo la domanda 5 e saltiamo la domanda 6; mentre se la risposta alla domanda 4 è "no", allora saltiamo la domanda 5 e poniamo la domanda 6).

Quindi dobbiamo definire quali domande sono condizionali e come "saltare" le domande in base alla risposta a una domanda.

Inizialmente, per mantenere semplice il percorso condizionale, non consentiremo condizioni basate su domande a scelta multipla, ma solo per domande polari (sì o no). Il design può essere esteso per supportare percorsi condizionali basati su domande a scelta multipla, ma è più complesso e voglio iniziare in modo semplice.

È importante che l'applicazione controlli questo flusso per ogni domanda, poiché la risposta a una domanda precedente può decidere il flusso per la domanda corrente (per saltare una domanda in base a una risposta precedente).

Amministrazione e rapporti

Per ora non aggiungeremo amministratori dei sondaggi online, ma li manterremo per la prossima estensione.

Ci dovranno essere alcuni rapporti e analisi; tuttavia, lo conserverò per la prossima versione poiché desidero archiviare alcune informazioni prima per eseguire analisi in seguito.

Entità e relazioni

Per il percorso condizionale attraverso il sondaggio, estenderò il question_order che è definito per ogni sondaggio e collega il sondaggio alle domande. Come accennato, per ora, il salto condizionale sarà basato solo su domande polari, quindi posso definire la domanda successiva da visualizzare in caso di risposta positiva e la domanda successiva da visualizzare in caso di risposta negativa.

Design formale

Estendiamo l'ERD creato nella Parte 1 di questa serie di articoli.

Aggiungerò conditional_order collegato a question_order; come accennato in precedenza, sosterrò solo l'ordine condizionato attraverso il sondaggio basato su domande polari. Ora, ci sono alcuni modi in cui questo può essere implementato. Le mie esigenze sono chiare, quindi sceglierò un'implementazione semplice. Se le tue esigenze sono più complesse, avresti bisogno di una soluzione più complessa.

Sarebbe bello definire semplicemente la domanda "successiva" da porre in base alla risposta della domanda attuale, ma ciò non ci consentirà di saltare una domanda più avanti nel sondaggio, quindi abbiamo bisogno di maggiore flessibilità.

Un modo è specificare quante domande andare avanti in caso di risposta positiva e quante andare avanti in caso di risposta negativa; tuttavia, devo specificare per quale domanda si applica il salto e la risposta di quale domanda da utilizzare. Quindi, per supportare il mio esempio:se la risposta alla domanda 4 è "sì", allora poniamo la domanda 5 e saltiamo la domanda 6, mentre se la risposta alla domanda 4 è "no", allora saltiamo la domanda 5 e poniamo la domanda 6 -- ciò richiede due voci che controllano entrambe la risposta alla domanda 4, una che va avanti di una domanda (come al solito) e una che salta due domande avanti (per saltare una domanda) e l'altra condizione da controllare dopo aver risposto alla domanda 5 che salta la domanda 6.

  +-------------------+----------------------+------------------------+------------------------+ 
  | question_order_id | response_to_question | positive_response_jump | negative_response_jump |
  +-------------------+----------------------+------------------------+------------------------+
  | 4                 | 4                    | 1                      | 2                      |
  +-------------------+----------------------+------------------------+------------------------+
  | 5                 | 4                    | 1                      | null                   |
  +-------------------+----------------------+------------------------+------------------------+

Un'alternativa è specificare l'id della domanda successiva a cui deve saltare il sondaggio in caso di risposta particolare:domanda successiva in caso di risposta positiva e domanda successiva in caso di risposta negativa risposta. Questo approccio ha pro e contro. Consentirebbe il verificarsi di loop, che un amministratore potrebbe non notare. Tuttavia, i loop potrebbero essere un effetto desiderato in modo che tu possa fare in modo che la domanda finale chieda all'intervistato se ha terminato il sondaggio e se risponde "no", quindi torna alla prima domanda. Inoltre, le domande a cui saltare in caso di risposta positiva o negativa possono essere impostate come chiavi esterne all'ordine delle domande specificato per il sondaggio in modo da sapere con certezza che la domanda specificata è definita nel sondaggio. Questa è una bella logica di controllo implementata tramite l'integrità referenziale. Penso che questa sia probabilmente la soluzione migliore, quindi è ciò che troverai nell'ERD.

Quindi, per supportare il mio esempio:se la risposta alla domanda 4 è "sì", allora poniamo la domanda 5 e saltiamo la domanda 6, mentre se la risposta alla domanda 4 è "no", allora saltiamo la domanda 5 e poniamo la domanda 6.

Come accennato, abbiamo due righe:

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                          |
  +--------+----------+----------------------+-------------------------------+-------------------------------+

Quando impostiamo la condizione, utilizzeremo una chiave esterna (non obbligatoria) per garantire che la domanda successiva esista. Un valore null viene utilizzato per un percorso che non è possibile o, se non viene specificata una domanda successiva, per terminare condizionalmente il sondaggio.




Ho colorato le tabelle che sono state create nella Parte 1 della serie di articoli in  giallo , le tabelle aggiunte nella Parte 2 in  arancione e la tabella appena aggiunta in  verde  in modo che sia più facile vedere le aggiunte.

Conclusione

Nessuna delle soluzioni descritte per la gestione dei passaggi condizionali attraverso un sondaggio è il sistema basato su regole definitivo, ma uno dei miei obiettivi è mantenere le cose semplici e dirette. Consentire flessibilità senza sovraccaricare le cose in complessità. E, mi ripeto, potresti avere altri requisiti. Identifica le tue esigenze; implementare o adattare ciò di cui hai bisogno. Credo fermamente nel riutilizzo e non nel reinventare la ruota.

Ora abbiamo iniziato ad implementare i miglioramenti che sono stati discussi nelle parti 1 e 2 di questa serie di articoli.

Nei prossimi articoli aggiungerò il supporto per queste funzionalità:

  • Gestione dei sondaggi
  • Rapporti e analisi