Heel persoonlijk gesproken, enquêtes zijn een geval waarin ik denk dat niets normaliseren en JSON vrijwel zoals het is opslaan is de betere optie.
Zonder dit zul je eindigen met allerlei bizarre use-cases die je uiteindelijk op de weg wilt beheren. Naast het opruimen van allerlei soorten meerkeuzevragen, moet je ook dat "Andere" antwoord erin beheren, conditievragen, voorwaardelijke groepen vragen, de lijst gaat maar door. Enquêtes zijn - net als andere vormen van gegevens - aan verandering onderhevig, en dingen gaan van lelijk naar nucleair als ze dat doen.
De verdienste van JSON is dat, aangezien enquêtes conceptueel onafhankelijk van elkaar zijn, je weinig tot geen referentiële integriteit van de ene naar de andere nodig hebt, dus je kunt net zo goed de hele boom met vragen en opties opslaan als één JSON-blob, en maak je zorgen over het formatteren in je app.
Hetzelfde geldt trouwens voor elk ingediend antwoord:neem de originele blob, markeer het relevante antwoord als geselecteerd, enzovoort, en sla de resulterende JSON op zoals het is , in plaats van verwijzingen naar de oorspronkelijke vragen op te slaan naast wat er werd beantwoord. Hierdoor kunt u gemakkelijk bijhouden welke gebruikers eigenlijk beantwoord, in tegenstelling tot wat de huidige versie van de enquête ook zegt, en ongeacht hoeveel de enquête is afgeweken sinds het oorspronkelijk werd beantwoord.
Als u de antwoorden later moet ontginnen, houd er dan rekening mee dat Postgres toestaat om JSON te indexeren met GIST-indexen voor het hele veld en BTREE-indexen voor expressies.