Taler meget personligt, er undersøgelser et tilfælde, hvor jeg tror, at man ikke normaliserer noget og gemmer JSON stort set som det er er den bedre mulighed.
Uden det vil du ende med alle mulige bizarre use-cases, som du i sidste ende vil have lyst til at styre hen ad vejen. Ud over ryddelige multiple choice-spørgsmål af alle slags, skal du også administrere det "Andet" svar i dem, betingelsesspørgsmål, betingede grupper af spørgsmål, listen bliver ved og ved. Hvad mere er, undersøgelser er - ligesom andre former for data - underlagt ændringer, og tingene går fra skræmmende til nukleare, når de gør det.
Fordelen ved JSON er, at da undersøgelser er konceptuelt uafhængige af hinanden, har du lidt eller intet behov for referentiel integritet fra den ene til den næste, så du kan lige så godt gemme hele træet af spørgsmål og muligheder som én JSON-blob, og bekymre dig om at formatere den i din app.
Det samme for hvert indsendt svar, for den sags skyld:Tag den originale klat, markér det relevante svar som valgt og så videre i det, og gem den resulterende JSON som den er , i stedet for at gemme referencer til de originale spørgsmål sammen med det, der blev besvaret. Dette vil give dig mulighed for nemt at holde styr på, hvilke brugere faktisk besvaret, i modsætning til hvad den nuværende version af undersøgelsen siger, og gør uanset hvor meget undersøgelsen har afviget siden den oprindeligt blev besvaret.
Hvis du har brug for at mine svarene senere, skal du bemærke, at Postgres tillader at indeksere JSON ved hjælp af GIST-indekser på hele feltet og BTREE-indekser på udtryk.