テーブル設計において、null値を取り得る項目の扱いは慎重でなければいけない。nullが設定される可能性のある項目を使ってSelect文の選択条件や並び順の指定をすると、予期しない結果が返る怖れがあるからだ。 具体的には、ある文字項目がnullを取り得る場合、設計者がnullとブランク(数字項目ではnullとゼロ)とで意味の違いがないとみなしても、SQLはそれらを区別して処理してしまう。非nullとして定義して0やブランクを初期値に設定しておけば大抵はしのげるのだが、日付項目のようにnullか非nullしか取らない項目向けにはnullであった場合のふるまいを仕様上明確にする必要がある。 nullの扱いに関わるこうしたややこしさを避けたい。そのために提唱される設計原則が「テーブル上の項目はすべて非nullとする」である。レコード上で条件次第でnullが設定されるとしたら、その項目をそのテーブ
![「永続null」と「時限null」を区別しよう - 設計者の発言](https://cdn-ak-scissors.b.st-hatena.com/image/square/6387c827afd7ce9eb745c11423b3e6e833172cb7/height=288;version=1;width=512/https%3A%2F%2Fcdn-ak.f.st-hatena.com%2Fimages%2Ffotolife%2Fd%2Fdbconcept%2F20211002%2F20211002155945.png)