セレクトボックスで選択した内容をデータベースへ保存する時は、何を保存するべき?

投稿者: Anonymous

HTMLフォーム内のセレクトボックスで選択した内容をデータベースへ保存したいのですが、何れを保存すべきかで迷っています

$data = 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 型

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *