Mówiąc bardzo osobiście, ankiety to jeden z przypadków, w których myślę, że normalizując niczego i przechowując JSON prawie tak jak jest jest lepszą opcją.
Bez tego skończysz z różnego rodzaju dziwacznymi przypadkami użycia, którymi w końcu będziesz chciał sobie poradzić. Oprócz uporządkowania wszelkiego rodzaju pytań wielokrotnego wyboru, musisz także zarządzać odpowiedzią „Inne” w nich, pytaniami warunkowymi, warunkowymi grupami pytań, lista jest długa. Co więcej, ankiety – podobnie jak inne formy danych – podlegają zmianom, a kiedy to się dzieje, rzeczy przechodzą od okropnych do nuklearnych.
Zaletą JSON jest to, że ponieważ ankiety są koncepcyjnie niezależne od siebie, nie ma potrzeby zachowania integralności referencyjnej pomiędzy kolejnymi punktami, więc równie dobrze możesz przechowywać całe drzewo pytań i opcji jako jeden blob JSON, i martw się o formatowanie w swojej aplikacji.
Tak samo dla każdej przesłanej odpowiedzi, w tym przypadku:weź oryginalną plamkę, oznacz odpowiednią odpowiedź jako wybraną i tak dalej w tym i zapisz wynikowy JSON tak jak jest , zamiast przechowywać odniesienia do oryginalnych pytań wraz z odpowiedziami. Umożliwi to łatwe śledzenie aktualnie użytkowników odpowiedział, w przeciwieństwie do tego, co mówi aktualna wersja ankiety, i niezależnie od tego, jak bardzo ankieta różniła się od pierwotnej odpowiedzi.
Jeśli chcesz później wyszukać odpowiedzi, zauważ, że Postgres umożliwia indeksowanie JSON przy użyciu indeksów GIST dla całego pola oraz indeksów BTREE dla wyrażeń.