非常に個人的に言えば、調査は、何も正規化せず、JSONをほとんどそのまま保存していると思う1つのケースです。 より良いオプションです。
これがないと、最終的には管理したいあらゆる種類の奇妙なユースケースになってしまいます。あらゆる種類の整頓された多肢選択問題に加えて、それらの「その他」の回答、条件付き質問、条件付き質問グループを管理する必要があります。リストはどんどん増えていきます。さらに、調査は、他の形式のデータと同様に、変更される可能性があり、変更されると、物事はひどいものから核的なものに変わります。
JSONのメリットは、調査が概念的に互いに独立しているため、ある調査から次の調査への参照整合性がほとんどまたはまったく必要ないことです。したがって、質問とオプションのツリー全体を1つのJSONブロブとして保存することもできます。アプリでフォーマットすることを心配してください。
送信された各回答についても同じです。その点については、元のブロブを取得し、その中で関連する回答を選択済みとしてマークするなどして、結果のJSONをそのまま保存します。 、元の質問への参照を回答されたものと一緒に保存するのではなく。これにより、実際にどのユーザーを簡単に追跡できるようになります。 調査の現在のバージョンが何を言っているかとは対照的に、回答し、最初に回答されてから調査がどれだけ分岐したかに関係なく行います。
後で回答をマイニングする必要がある場合は、Postgresではフィールド全体でGISTインデックスを使用し、式でBTREEインデックスを使用してJSONにインデックスを付けることができることに注意してください。