sql >> Databasteknik >  >> RDS >> Database

En databasmodell för en onlineundersökning. Del 2

I del 1 i den här artikelserien diskuterade vi en grundläggande design för en onlineundersökning. I slutet av den artikeln nämnde jag att del 2 skulle täcka mer avancerade funktioner för vår undersökning som:

  • Olika typer av frågor som flervalsfrågor
  • Villkorlig ordning på frågor i en undersökning eller, med andra ord, möjligheten till en villkorad väg genom undersökningen
  • Administration av undersökningarna
  • Rapporter och analys

Låt oss börja med att utöka funktionaliteten för att stödja olika typer av frågor.

Typer av frågor

I del 1 av denna artikelserie använde vi bara öppna frågor som bestod av en fråga och ett svar. I den här artikeln kommer vi att definiera olika typer av frågor som till exempel polära (ja-nej) frågor och flervalsfrågor . Varje fråga kommer att förknippas med en typ. För polära frågor kommer vi bara att tillåta ja/nej som svar, men i framtiden kan vi tillåta variationer som sant/falskt. Frågor som inte är öppna kommer att ha möjliga svar som respondenten kan välja bland.

I framtiden kommer vi att lägga till frågor som kräver ett betygsatt svar. Till exempel, "Hur mycket gillar du databasdesign; betyg mellan 1 och 100 (med 1 indikerar att du gillar det väldigt lite och 100 indikerar att du gillar det oerhört)?"

Entiteter och relationer

För de olika typerna av frågor i undersökningen kommer jag att utöka området "frågor" med typer och svarsval.

Helst skulle jag vilja skapa en främmande nyckel mellan de faktiska svaren och de möjliga svaren för flervalsfrågor (response_choice) för att säkerställa dataintegritet. Detta skulle fungera om alla frågor hade svarsval och öppna frågor inte var tillåtna. Eftersom jag behöver stödja öppna frågor måste jag säkerställa integriteten hos svaren i applikationskoden.

Formell design

Vi måste utöka ERD som skapades i del 1 av denna artikelserie. Som tidigare kommer jag att använda Vertabelo, en onlinedatabasmodellerare. Om du inte har ett Vertabelo-konto än kan du registrera dig för en gratis provperiod här.

Jag kommer att göra en kommentar; du kommer att upptäcka att jag vanligtvis använder runda tal som 100 eller 1000 för att definiera längden på varcharfält; Jag föreslår inte att dessa nödvändigtvis är av lämplig storlek, utan jag använder snarare detta som en stenografi istället för att lämna längden odefinierad. När du använder den här modellen, vänligen anpassa längderna efter dina specifika krav. Kommer du till exempel att tillåta en respondent att skriva in ett mycket, väldigt långt svar på en öppen fråga – eller kommer du att begränsa dem till, låt oss säga, 1000 tecken? Detta kan bero på vilket program du bygger för att använda databasen, eftersom det kan ha begränsningar för fältlängder.

Jag lägger till en question_type-tabell kopplad till frågan:dessa kan ha namnet "open ended", "yes-no", "multiple choice" och, i framtiden, "rating." För flervalsfrågor skulle varje fråga ha response_choices att välja mellan.

Du kan till och med använda detta för att implementera polära frågor, men jag tycker att det är överdrivet. En annan lösning skulle vara att länka response_choice till question_type, så att question_type-raden “yes-no” skulle länkas till response_choice-raderna “Yes” och “No”, men återigen, jag känner inte att det är nödvändigt – men du kanske du vill ha flerspråkiga möjligheter. Du skulle sedan inkludera ett fält för respondentens språk i tabellen response_choice, eller hantera internationalisering i användargränssnittet.




Jag har färglagt tabellerna som skapades i del 1 i  gul  och de nyligen tillagda tabellerna i  orange  så att det är lättare att se tilläggen.

Slutsats

Nu har vi börjat implementera förbättringarna som diskuterades i del 1 av denna artikelserie.

I nästa artikel kommer jag att lägga till mer stöd för följande funktioner:

  • Villkorlig ordning på frågorna i en undersökning
  • Administration av undersökningarna
  • Rapporter och analyser

  1. mysql välja int som valuta eller konvertera int till valutaformat?

  2. BESTÄLL EFTER datum och tid FÖRE GRUPP EFTER namn i mysql

  3. Finns det något sätt att få JBoss-anslutningspoolen att återansluta till Oracle när anslutningarna blir dåliga?

  4. Postgres:Hur konverterar man en json-sträng till text?