質問: アンケートサイトを作成しています。 アンケートに対する回答項目が増加する場合、データベースに格納するにはどのような考え方があるのでしょうか?という質問です。 たとえば好きなお寿司のネタは?という質問に対して、あらかじめ、マグロ、イカ、エビ、タコ、**その他**といった回答項目を用意して答えられるようにしたいと考えています。 しかしユーザーによっては、「いやオレえんがわが好きなんだよ!」ということも考えられますので対策として、ユーザーに新たな選択肢を作成できるようなものにしたいと考えています。 ですので、ユーザーがその他項目に えんがわ と入力することで、次回以降別のユーザーが回答するときの項目は、マグロ、イカ、エビ、タコ、**えんがわ**、その他、となるようなものにしたいと考えています。 例えが長くなりましたが、このように回答項目をデータベースに格納する場合、どのような考え方がオーソドックスなのでしょうか? 私が考えた案としては、 1.あらかじめ質問カラムを1つ作成、そこに配列として格納する。 2.カラムを50個ほど作成し、カラムのフィールドに回答項目が一つずつ格納されていく... などが思いつきました。よろしくお願いします。
回答: 「質問データ」と1対多となる「回答項目」テーブルを作って保存。 質問IDと回答IDに主キー。 | 質問ID | 回答ID | 回答内容 | | --- | --- | --- | | 1 | 1 | マグロ | | 1 | 2 | イカ | | 1 | 9999999 | その他 | | 2 | 1 | ハンバーグ | | 2 | 2 | ステーキ | | 2 | 9999999 | その他 | 「その他」が固定なら最大値振っておくとかで重複を避けることはできます(9999999はあくまで例。型による) 追加される場合はとりあえず「その他」を除いた最大値+1 その他も最初から上記例で3とかで入れておいていいけど、順番を気にする必要がある場合は「表示順」の列も必要になるので、そこは要件次第で。