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

Un modello di dati dell'agenzia di opinione pubblica

Come vengono archiviati tutti i dati dell'opinione pubblica? Esaminiamo un modello di dati dei sondaggi di opinione.

Tutti vogliono sapere cosa pensa il pubblico, dai politici e dalle aziende agli individui che vogliono sapere cosa pensano gli altri su un determinato argomento. Questo tipo di lavoro viene solitamente svolto da agenzie specializzate in quel tipo di ricerca.

Oggi daremo un'occhiata a un modello di dati che tale agenzia potrebbe utilizzare per archiviare tutti i dati rilevanti del sondaggio, dalle domande e dalle risposte predefinite al feedback effettivo. Questi dati sarebbero stati successivamente utilizzati per creare vari rapporti. Quindi, iniziamo.

Idea

I sondaggi possono essere creati ovunque. Potrebbero essere ben pianificati e includere un campione rappresentativo del pubblico (basato sui dati demografici). Oppure potresti farli sul posto, ad es. se vuoi prevedere i risultati elettorali sulla base di un campione (come un exit poll), probabilmente chiederesti alle persone al seggio elettorale come hanno votato.

D'altra parte, se desideri creare lo stesso sondaggio prima delle elezioni, probabilmente selezionerai un campione e contatterai le persone per telefono o di persona. Di solito, ci sono solo poche domande per questo tipo di sondaggio, alcune per coprire i dati demografici e altre per coprire ciò che ci interessa veramente.

I sondaggi possono anche essere molto più complessi, ad es. se vuoi conoscere l'opinione pubblica su un determinato prodotto, coprendo tutto dalle sue prestazioni al suo confezionamento.

In questo articolo, non discuterò come selezionare un campione di persone; piuttosto, mi concentrerò sul sondaggio stesso, sulle sue domande e sulle risposte.

Modello di dati

Modello di dati dell'agenzia di opinione pubblica

Il modello si compone di tre aree tematiche:

  • Polls
  • Questions & Answers
  • Result

Descriveremo ogni area tematica nell'ordine in cui è elencata.

Sondaggi

Prima di iniziare a porre domande, dobbiamo definire ciò che ci interessa. Definiremo sondaggi e questionari in questa sezione, quindi aggiungeremo domande e risposte nella prossima.

Inizieremo con il poll_type dizionario. Possiamo aspettarci che ripeteremo principalmente sondaggi dello stesso tipo. Il tipo più comune sono probabilmente i sondaggi elettorali, ma vogliamo essere in grado di aggiungere nuovi tipi di sondaggi lungo il percorso. Per ogni tipo di sondaggio, memorizzeremo un poll_type_name UNICO e usa la description attributo per fornire ulteriori dettagli.

Quattro bandiere:politics , economy , sport e hobby – sono usati per indicare il tipo di sondaggio. Un sondaggio potrebbe riguardare uno o più di questi argomenti; se necessario, potremmo dividere queste categorie in un dizionario separato e avere una relazione molti-a-molti tra quel dizionario e il poll_type tabella.

L'ultimo attributo in questa tabella è time_created . Denota il momento in cui una riga viene inserita in questa tabella.

La prossima cosa che dobbiamo fare è definire un singolo poll . Questa è una singola istanza, ad es. "Elezioni presidenziali degli Stati Uniti del 2020 - Sondaggio di aprile 2020" . Per ogni sondaggio, memorizzeremo i seguenti dettagli:

  • poll_type_id – Un riferimento al poll_type .
  • description – Tutti i dettagli relativi a questo sondaggio, in formato testuale.
  • start_time e end_time – Gli orari di inizio e fine definiti, durante i quali viene eseguito questo sondaggio.
  • time_created – Il momento effettivo in cui è stato creato questo sondaggio.

I sondaggi possono essere correlati tra loro. Nell'esempio del "Elezioni presidenziali degli Stati Uniti del 2020 - Sondaggio di aprile 2020" , potremmo fare lo stesso sondaggio il mese prossimo per vedere le opinioni più attuali. Lo chiameremmo "Elezioni presidenziali degli Stati Uniti del 2020 - Sondaggio di maggio 2020" . Questi due sondaggi sono correlati perché i loro risultati mostrano tendenze. Per stabilire tale relazione, utilizzeremo il related_poll tavolo nel nostro modello. Contiene solo la coppia UNICA di poll_idrelated_poll_id , che denota il sondaggio e il suo predecessore.

Nota che potremmo usare questa tabella per memorizzare tutti i sondaggi correlati in qualsiasi modo, non solo i predecessori/successori. Se volessimo definire relazioni diverse, dovremmo aggiungere un altro dizionario, ma in questo articolo non andremo in questo modo.

L'ultima tabella in questa area tematica è il questionnaire tavolo. Nella maggior parte dei casi, ogni sondaggio avrà esattamente un questionario, ma voglio lasciare l'opzione che potremmo averne più di uno se necessario. Pertanto, ho utilizzato una tabella separata. In questa tabella memorizzeremo solo l'ID del sondaggio correlato (poll_id ), una introduction descrivendo il questionario e il timestamp in cui è stato inserito il record (time_created ).

Domande e risposte

Ora siamo pronti per creare tutti i dettagli del questionario. Possiamo anche elencare tutte le domande che vogliamo porre e tutte le risposte predefinite.

La tabella centrale in questa area tematica è la question tavolo. Ogni domanda è definita dai seguenti dettagli:

  • question_text – Un testo che verrà visualizzato a ogni individuo interrogato.
  • questionnaire_id – Un riferimento che denoti il ​​questionario di questa domanda.
  • question_type_id – Un riferimento che denota il question_type , che è UNICAMENTE denotato da question_type_name . Queste sono fondamentalmente categorie, ad es. "dati demografici", "opinione", "controllo", ecc. Questi ci permetterebbero di separare le domande demografiche e di opinione e di trovare una correlazione tra loro.
  • answer_type_id – Un riferimento al tipo di risposta che verrà utilizzata per questa domanda. Ogni answer_type è UNICAMENTE definito da answer_type_name e indica come viene visualizzata la risposta. Alcuni tipi previsti sono "aperto", "elenco", "casella di controllo" e "multiplo".
  • ordinal_position – Questo valore indica la posizione di questa domanda nel questionario. Insieme al questionnaire_id , costituisce la chiave alternativa di questa tabella.

Un elenco di tutte le risposte predefinite è memorizzato nella answer tavolo. Se il tipo di domanda non è aperto (cioè il testo non verrà inserito dall'individuo), avremo una serie di risposte predefinite. Per ogni risposta, definiremo la domanda a cui appartiene (question_id ), il answer_text e il ordinal_position di quella risposta dentro quella domanda. Ancora una volta, una coppia UNICA, questa volta question_idordinal_position – costituisce la chiave alternativa di questa tabella.

Risultato

Nelle due aree tematiche precedenti, abbiamo definito tutto ciò di cui abbiamo bisogno per creare il sondaggio e iniziare a porre domande. Ora dobbiamo definire una struttura di dati per memorizzare le risposte effettive.

Tre delle sette tabelle nel Result aree tematiche sono state precedentemente menzionate e descritte. Questi sono questionnaire , question e answer . Le restanti quattro tabelle vengono utilizzate per memorizzare ciò che ci interessa davvero.

Creeremo un record nel result_questionnaire tabella per ogni partecipante al sondaggio. Il questionnaire_id fornire esus con tutte le informazioni sul sondaggio pertinente. Il contact_type_id è un riferimento al contact_type dizionario. I valori in questa tabella descrivono il modo in cui abbiamo interagito con questa persona. Questi valori sono definiti UNICAMENTE da contact_type_name valore e potrebbe essere qualcosa come "telefono", "di persona", "e-mail", "modulo web", ecc.

Il pollster_id l'attributo è un riferimento al pollster tabella, che fornisce le informazioni su chi ha condotto quel sondaggio effettivo. Per ogni pollster , memorizzeremo solo la loro email UNICA e il loro first_name e last_name . Il time_created l'attributo indica l'ora effettiva in cui è stato creato questo record, mentre il time_completed sarà impostato nel momento in cui questo sondaggio sarà completato. (Fino a quel momento, sarà NULL).

L'ultima tabella nel modello è il result_answer tavolo. Come suggerisce il nome, è qui che memorizzeremo le risposte effettive che abbiamo ricevuto dai partecipanti al sondaggio. Per ogni record in questa tabella avremo:

  • result_questionnaire_id – Un riferimento al questionario pertinente.
  • question_id – Un riferimento che denota la domanda a cui è stata data risposta da questa risposta.
  • answer_id – Un riferimento alla risposta utilizzata per rispondere a questa domanda. Questo attributo conterrà un valore NULL quando la domanda è di tipo "aperto" (perché non c'erano risposte predefinite tra cui scegliere).
  • answer_text – Il testo che è stato inserito per rispondere a questa domanda. Questo attributo conterrà un valore quando la domanda era "aperta"; in tutti gli altri casi sarà NULL.
  • time_created – L'ora effettiva in cui questa risposta è stata inserita nel nostro sistema.

Possibili miglioramenti

Finora, abbiamo spiegato come archiviare i dati del sondaggio. Non abbiamo discusso di cosa faremmo con i dati dopo la chiusura del sondaggio. Possiamo aspettarci che non avremo bisogno dei vecchi dati in futuro, almeno non nel nostro database operativo. Pertanto, potremmo fare due cose:

  • Memorizza un riepilogo del sondaggio in una tabella separata nel database operativo. Ciò manterrebbe tali informazioni a nostra disposizione se volessimo vedere cosa è successo con un sondaggio simile.
  • Memorizza tutti i dati di polling in un database di backup con la stessa struttura del database operativo. Questo ci permetterebbe di accedere ai dettagli quando ne avessimo bisogno.

Potremmo anche creare un data warehouse per archiviare i risultati dei sondaggi, ma ciò non sarebbe necessario se avessimo già svolto le attività descritte nei due punti elenco.

Cosa ne pensi del nostro modello di dati del sondaggio di opinione?

Ci piacerebbe sentire la tua opinione su cosa potremmo cambiare per migliorare il modello di dati dei sondaggi di opinione. Hai esperienza nel settore? Pensi che ci siamo persi qualcosa? Aggiungeresti o rimuoveresti qualcosa? Non vedo l'ora di sentire le tue opinioni.