ここで議論されているのは例えば「status」カラムに保存される値をそれぞれ意味を持たせた数値で表現するか、論理名的な文字列で表現するかという話であるが。
数値で表現する場合:
0 // 未審査
1 // 審査中
2 // 登録完了
3 // 却下
みたいな感じで数字がそれぞれの状態と対応することになる。
このようにデータを持つ場合、プログラム側でコード値と文字列を対応させる必要が出てくる。
文字列で表現する場合:
'UNEXAMINED' // 未審査
'REVIEW' // 審査中
'COMPLETE' // 登録完了
'REJECTED' // 却下
という感じになる。
以下メモ書き。
- APIでフロント側にデータを流すことが前提であれば、いちいち数値→文字列への変換処理を挟まなくて済む分、文字列表現の方が(開発)効率は高そう
- 文字列表現にした場合でも、結局フロント側ではUIの表現に変換する必要があるので数値でも文字列でもどっちでもいい話ではある。しかし、文字列の方がデータの可読性が高いので(文字列表現の)メリットが上回るだろう
- 入力ミスが発生したらどうする?問題については、CHECK制約や外部キー制約でカバーするべきだろう
- 日本語が入ってきたら長音とか見分けつかなくね?問題については、ASCII以外使うな、日本語表現はUI側でやれが落とし所だろう
- 数値の方がクエリの速度が速いというのは事実だろうが、この使い方の場合だと誤差レベルに収まるのでは(インデックスも張るだろうし)
- ソートした時に文字コード順にソートされるので不便問題については、ソート順を制御したいなら数値の場合でも結局ソート順指定カラムを設けることになるだろう(したがって、手間は変わらない)
結論としては、文字列表現の方がメリットがデメリットを上回っているように思える。
(2020/08/26)