10章 サーティーワンフレーバー(31のフレーバー) より
ENUMのかわりに参照テーブルを使うという話。基本的にはやってみたいと思うアイディアだった。
すると、多くのプログラマーは、アプリケーションコードの側にも値のリストを定義し、手でメンテナンスするという選択をします。
参照テーブルを使えば、アプリケーション側では値のリストを定義する必要がないという主張なのだが、このケースではそう簡単ではないと思う。 statusをドロップダウンリストから選択するだけであれば問題無いが、バグを管理するアプリケーションを考えたとき、 'IN PROGRESS'のものを'FIXED'にするボタンが欲しいとか、'NEW'のものだけ表示させたいみたいな要求がありそうだからだ。
つまり値のリストに対して、個別の要件がありそうな場合はアプリケーションコード側にもリストの定義は必要になる。 章の冒頭では'Mr.', 'Mrs.'等の敬称の例があげられていた。こちらの方がアプリケーション側にリストを持たずに済みそうだ (もちろんどのようなアプリケーションかにもよるが)。
このような参照テーブルからアプリケーション側の値のリストを結び付ける機能をフレームワークが持ってもいいかもしれない。
外部キーにON UPDATE CASCADEオプションを指定して宣言すれば、値の名前の変更も簡単に行えます
ただしサンプルのDBでは、Bugs.status
の定義がDEFAULT 'NEW'
となっているので、'NEW'の名前を変更する場合はここも修正が必要になる。