外部テーブル、enum、varcharとか

どうでもよい話。
ってか、だいぶダメなことを書いている気もする。

例えば、あるテーブルで状態(status)を扱うとして、"sleep"、"runnning"、"ready"の3つの状態をがある場合、以下の3パターンが考えられる。

1. 外部テーブルとして マスタstatus を準備し、元のテーブルにはキーのみを持たせる。
2. enum型のフィールドを作成し、 値を"sleep"、"runnning"、"ready" とする。
3. varchar(30)とかにしておき、文字列をそのまま入れるようにする。

教科書的に正しいのは1だと思うのだけど、status を追加する時、マスタを意識するのがめんどくさい。
2と3を比較して、2が優れているのは、"slep"といったタイポな文字列の挿入をDBMSレベルで防止してくれることだ。
でもだから何?という気もする。
そもそもタイポはDBMSの前のレイヤのスクリプトレベルのバグであり、スクリプトは通りました、でもDBMSは通りませんという状態はなんかアレな気がする。
そもそも enum の値を意識するのがめんどくさい。

ってことで、最近は 3 の手法をとったりする。
リスクは全部スクリプト側で持つ訳だが、そもそもDBMSを触るよりスクリプトのバグに悩んだほうがずっと楽チンだったりするのだ。

ただ、status に該当する部分が10も20もあってころころ変わるようなものであったり、頻繁にグルーピングで集計されるようなものだと、やっぱり1の正規化かなという気がする。

あと WordPressって割と3のパターンが多い気がする。
そもそも WordPressって10ぐらいしかテーブルがないんだよね。
レジストリと言いますか、メタテーブル(ユーザID、キー、値)を上手に使っているとは思う。
だから、プラグインなどの作り込みも結構簡単な訳で。
多くのプラグインはカラムの構造自体にはノータッチ。