Schema del database dei sondaggi.
Questo è un vero classico, fatto da migliaia. Sembrano sempre "abbastanza semplici", ma per essere buoni è in realtà piuttosto complesso. Per fare questo in Rails userei il modello mostrato nello schema allegato. Sono sicuro che sembra complicato per alcuni, ma una volta che ne hai costruiti alcuni, nel corso degli anni, ti rendi conto che la maggior parte delle decisioni di progettazione sono modelli molto classici, meglio affrontati da una struttura di dati dinamica dinamica fin.
Maggiori dettagli di seguito:
Dettagli della tabella per le tabelle chiave
risposte
La tabella delle risposte è fondamentale in quanto acquisisce le risposte effettive da parte degli utenti. Noterai che risponde ai link a question_options , non a domande . Questo è intenzionale.
input_types
input_types sono i tipi di domande. Ogni domanda può essere solo di 1 tipo, ad esempio tutte le selezioni radio, tutti i campi di testo, ecc. Usa domande aggiuntive per quando ci sono (diciamo) 5 composizioni radio e 1 casella di controllo per un "include?" opzione o una tale combinazione. Etichetta le due domande nella vista degli utenti come una, ma internamente hanno due domande, una per i quadranti radio, una per la casella di controllo. La casella di controllo avrà un gruppo di 1 in questo caso.
option_groups
option_groups e option_choices ti consentono di creare gruppi "comuni". Un esempio, in un'applicazione immobiliare potrebbe esserci la domanda "Quanti anni ha la proprietà?". Le risposte potrebbero essere desiderate negli intervalli: 1-5 6-10 10-25 25-100 100+
Quindi, ad esempio, se c'è una domanda sull'età della proprietà adiacente, il sondaggio vorrà "riutilizzare" gli intervalli di cui sopra, in modo che vengano utilizzati lo stesso gruppo_opzioni e opzioni.
unità di misura
units_of_measure è come sembra. Che si tratti di pollici, tazze, pixel, mattoni o altro, puoi definirlo una volta qui.
Cordiali saluti: Sebbene di natura generica, è possibile creare un'applicazione in aggiunta a questo, e questo schema è adatto al framework Ruby On Rails con convenzioni come "id" per la chiave primaria per ogni tabella. Inoltre, le relazioni sono tutte semplici one_to_many senza molte_to_many o has_many through necessarie. Vorrei probabilmente aggiungere has_many: throughs e / o: delegates per ottenere facilmente cose come survey_name da una singola risposta senza più.