いいえ1つのカンマ区切りのフィールドには格納しないでください。ソートや値の簡単な使用はできません。 次のような構造を使用してください。
まず、この種のものについて3-4のテーブルがあまりにも多すぎることがわかりますが、これで多くの利点があります。このようにして、オプションを非常に簡単に並べ替えたり、値を変更したり、特定のオプションをアクティブ化、非アクティブ化、または削除したり、多少の簡単な変更で多くの言語をサポートすることもできます。
また、2つの異なるタイプのテーブルを使用して、記憶容量を最適化することができます.1つはチェックボックスのみ、もう1つは整数値、もう1つは混合値(checkbox_option_intとcheckbox_option_text)です。
このようにして、checkbox_idをquestion_idに追加して、データベース内の冗長データなしですべての可能なオプションを選択するのは非常に簡単です。
checkbox_type
id type
1 int
2 text
チェックボックス
id checkbox_type_id
1 1
2 1
3 2
checkbox_option_int
id checkbox_id value label rank active
1 1 1 A 1 yes
2 1 2 B 2 yes
3 1 5 C 4 no
4 1 8 D 3 yes
5 2 1 AA 1 yes
6 2 2 BB 2 yes
checkbox_option_text
id checkbox_id value label rank active
1 3 yes Yes 1 yes
2 3 no No 2 yes
3 3 perhaps Perhaps 3 no
EDIT:
次のような答えを保存することができます:
例えば
答え
id question_id
1 1
2 2
answer_checkbox
id answer_id checkbox_id
1 1 1
2 2 3
(値2 =>ラベル "B" でのみチェックボックスを選択)
answer_checkbox_int
answser_checkbox_id checkbox_option_int_id
1 2
(値1 =>ラベルを持つ唯一のチェックボックス "はい" を選択)
answer_checkbox_text
answser_checkbox_id checkbox_option_text_id
2 1
これは私がカスタムフィールドのテーブルを定義するのに役立ちます。私の質問は、ユーザーが選択した値を保存する方法でした。私は、checkboxとcheckbox_option_textの多対多の関係として動作する別のテーブルを持つことができると思います。私はここで正しいですか? –
はい、そうです。オプションを2つのテーブルに分割する場合、チェックボックスのタイプについてアプリケーション層をチェックする必要がありますが、これは比較的簡単です。それ以外の場合は、簡単にするために2つのテーブルをマージすることができます。 –