ある選択肢のみ許容するcolumnを定義する際の方針
table設計時に、columnが、ある選択肢のみ許容するように設計したい時にどうするか
いくつかの方針が考えられる
e.g. ENUM('A', 'B', 'C')
e.g. VARCHAR (20) CHECK (status IN ('A', 'B', 'C'))
ユーザー定義型
より緩い型
e.g. string
これは、まあ言うまでもなく論外だろうmrsekut.icon
結論
将来的に、選択肢に変更の可能性が少しでもある場合
本当に将来的に変更がないと確信できる場合
CHECK制約
ENUM型 (非標準)
それ以外はなし
ユーザー定義型、DBトリガー
DBの移植性が弱い上に、上記2つを超えるメリットがない
↑この方針だけではちょっと緩い気がするmrsekut.icon
これだけだと、47都道府県をENUMで定義する余地がまだ存在する
かなり直感には反するが、一応そこまで問題ないのか
普通は、他のtableに定義すると思うmrsekut.icon
↓viewに一覧するのがダルい問題はある
「他のtable + 外部キー制約」以外の選択肢は、とにかく変更に弱い 選択肢の追加、削除、分解などがあった場合に、とにかく面倒くさい
UIで「許容される選択肢」をセレクトボックスなどで表示する際に、
ENUM型などを使っていると面倒になる
ただし、返ってくるのは"ENUM('A','B','C')"のような文字列
これをparseして、['A','B','C']に変換する必要がある
参考
丁寧に解説されている