
flag について悩む の コメントより
なるほど、Boolean NOT NULL ですか。どこまで腹をくくれるかって話ですね。
Boolean のことをよく知らないので調べてみました。
Boolean が規格化されたのは SQL-99 なので、まだまだ使えない RDBMS が多いのが最大の欠点。各 RDBMS の対応状況は
- PostgreSQL は Boolean に対応
- MySQL だと tinyint (-128~127) のシノニム
- Oracle は未対応?
- DB2も使用不可っぽい?
てな感じ。ただ、MySQL は ENUM 型 を使って、
ENUM('TRUE','FALSE')
ENUM(0, 1)
ENUM(0, 1) NOT NULL
などと型の定義ができる (Oracle や DB2 もできる?)。まぁ制約を使えばどんな RDMBS でも何とかなるんだけれども。
てな感じでしょうか。
で、仮に Boolean が使えるとして、自分が使うかどうかを考えてみました。その結果、
- 他システムとデータのやりとりをする場合、他システムが決めた項目が 2値なら使用しない
(3値以上になる可能性が高いから)。逆に自システム用で 2値と決定しなたら使用する。
- レコード数が数百万を超えるなら使わないかもしれない
(型変更に対する DB メンテナンス時間がかかるから)
という結論になりました。わたしには「2値でいくぞ」という覚悟が足らないのかもしれない。
名前というより、データ型をBOOLEAN NOT NULLにしたら、2値ということでいいんでないでしょうか。そうでなければ、2値以外もありえる、たとえそのときは選択肢が2つしかなくとも、設計者は増える可能性を考えていた(仕様変更含め)、という認識で、データ型重視で。もちろん、『is_admin』なんて項目に、「管理者/保守ユーザ/一般ユーザ」なんて値が設定可能だったら、「なんでそんな名前やねん!」となりますが、それは単に設計者のセンスが悪かったのだと割り切ればいいんでないでしょうか。まあ、どっちにしても、なにをBOOLEANにするか?迷いどころなので、問題は解決できていないのですが、BOOLEANにしちゃったら、もう小手先の変更では取り返しがつかないというプレッシャーがあるので、よく考えた上でそうなっているはずだと、名前より重要な位置づけで考えられると思います。
なるほど、Boolean NOT NULL ですか。どこまで腹をくくれるかって話ですね。
Boolean のことをよく知らないので調べてみました。
Boolean が規格化されたのは SQL-99 なので、まだまだ使えない RDBMS が多いのが最大の欠点。各 RDBMS の対応状況は
- PostgreSQL は Boolean に対応
- MySQL だと tinyint (-128~127) のシノニム
- Oracle は未対応?
- DB2も使用不可っぽい?
てな感じ。ただ、MySQL は ENUM 型 を使って、
ENUM('TRUE','FALSE')
ENUM(0, 1)
ENUM(0, 1) NOT NULL
などと型の定義ができる (Oracle や DB2 もできる?)。まぁ制約を使えばどんな RDMBS でも何とかなるんだけれども。
てな感じでしょうか。
で、仮に Boolean が使えるとして、自分が使うかどうかを考えてみました。その結果、
- 他システムとデータのやりとりをする場合、他システムが決めた項目が 2値なら使用しない
(3値以上になる可能性が高いから)。逆に自システム用で 2値と決定しなたら使用する。
- レコード数が数百万を超えるなら使わないかもしれない
(型変更に対する DB メンテナンス時間がかかるから)
という結論になりました。わたしには「2値でいくぞ」という覚悟が足らないのかもしれない。
スポンサーサイト


