質問: array("選択肢1","選択肢2","選択肢3"); ``` --- **案1.受信した「配列のインデックス」を保存** ・0 または 1 または 2 ・DBだけ見た際、値が分かりづらい ・仕様変更により$data内容を変更することになった場合は、対応が大変そう ・intで保存することになるので処理が速そう ・こちらが一般的ですか? **案2.「配列の値」を保存** ・選択肢0 または 選択肢1 または 選択肢2 ・DBだけ見た際、値が分かる ・仕様変更により$data内容を変更することになった場合でも、対応できそう ・文字列で保存しても、速度的にはほとんど変わらなそう
回答: それぞれの案におけるデメリットと、その上でどうすべきかという案3を回答します。 案1. 受信した「配列のインデックス」を保存 ====================== 値が分かりづらいのに加え、今後セレクトボックスの順序が変更になるような改修が起こった場合にDBの値を変更する必要が生じます。 しかし、 `int` で保存するので、処理速度はともかく保存される容量は比較的小さくなるでしょう。 案2. 「配列の値」を保存 ============= 値は分かりやすくなりますが、案1では**配列の順序**が変更されたときにDBの内容を変更する必要があるのと同様に、こちらでは**配列の値**、すなわち文言が修正された場合にDBの内容を変更する必要が生じるでしょう。 また、 `TEXT` などの文字列を保存する都合上、サイズが膨らみやすくなりそうです。 案3. ENUM型を利用する ============== 文字列に対応する値のリストを保存する方法です。値も分かりやすくなり、DBに保存する値も小さくなるでしょう。選択肢の順序や文言に変更が生じた場合も対応が容易になるかと存じます。 MySQL :: MySQL 5.6 リファレンスマニュアル :: 11.4.4 ENUM 型