【入門編】 NOT NULL制約 – PostgreSQL

こんにちは!データベースの世界へようこそ。

今日は、PostgreSQLの設計において「これだけは絶対に守ってほしい!」という、基本中の基本だけどめちゃくちゃ重要な『NOT NULL(ノット・ヌル)制約』についてお話しします。

難しそうな名前ですよね。でも、実は私たちの日常にもあふれている、とってもシンプルなルールなんですよ。

—

そもそも「NULL」って何者?

データベースにおいて「NULL」というのは、単なる「0」や「空文字」ではありません。「そこには何もない」「まだ何も決まっていない」「正体不明」という状態を指します。

例えば、あなたがカフェの会員リストを作っていると想像してみてください。

  • 名前:佐藤さん
  • メールアドレス:sato@example.com
  • 電話番号:(ここが空っぽ!)

この「電話番号が空っぽ」の状態が、まさに「NULL」です。
「番号を知らないのか?」「そもそも持っていないのか?」「入力し忘れたのか?」……データベースからすると、NULLが入っていると「このデータ、本当にこれで合ってるの?」と、いちいち気を遣わなきゃいけない存在なんです。

なぜ「NOT NULL」を付けるのか?

「NOT NULL」制約というのは、日本語に訳すと「空っぽは禁止!」という命令です。

1. データの「品質」を守る門番

もし、必須の情報を入れ忘れたままデータが保存されてしまったら、後で困るのは自分たちですよね。
例えば、配送先住所がNULLのまま注文データが確定してしまったら、荷物はどこに届ければいいんでしょう?

「NOT NULL」を設定しておくと、誰かがうっかり空っぽのまま保存しようとした瞬間に、PostgreSQLが「ちょっと待った!ここは絶対に埋めてもらわないと困ります!」とエラーを出して止めてくれます。これぞ、データの守護神です。

2. PostgreSQLが「速く」なるヒントになる

ここからがちょっとエンジニアっぽい話になりますが、実はこれ、パフォーマンスにも直結するんです。

PostgreSQLの「プランナ(クエリをどう実行するか考える脳みそ)」は、常に最速の方法を探しています。
もし、ある列に「NOT NULL」が付いていれば、PostgreSQLはこう考えます。

「あ、この列には絶対にNULLなんて入ってないんだな。じゃあ、わざわざ『NULLかどうか』をチェックする作業は省略して、全力でデータを検索しよう!」

この「チェックしなくていい」という判断が、数百万、数千万件という膨大なデータになったとき、検索速度の大きな差として跳ね返ってきます。つまり、制約を付けることは、データベースに対する「これには変な値は入っていないから安心してね」という信頼の証なんですね。

—

どう使い分ければいいの?

初心者の方からよく受ける質問が、「じゃあ全部NOT NULLにすればいいの?」というもの。

答えは……「基本はYES!」です。

迷ったら、まずはNOT NULLを付けてみてください。もし後から「あ、ここは未定の状態もありえるかも」と分かったら、その時になって制約を外すこともできます。逆(最初からNULLを許可して、あとでNOT NULLに変える)をやろうとすると、すでに溜まってしまった「NULLデータ」の掃除という面倒な作業が発生してしまいます。

  • 名前やIDなど、なくてはならないもの → NOT NULL
  • アンケートの「自由記入欄」など、本当に書かなくてもいいもの → NULLを許可

この基準で選んでみると、ぐっと設計がスッキリしますよ。

—

まとめ

「NOT NULL」は、ただの厳しいルールではありません。
未来の自分が、自信を持ってデータを使えるようにするための「思いやり」です。

データの品質を守り、さらにデータベースの検索まで速くしてくれる魔法のスパイス。ぜひ、テーブルを作るときは「ここは空っぽでも大丈夫かな?」と一度立ち止まって考えてみてくださいね。

設計に正解はひとつじゃないけれど、こうした小さな積み重ねが、将来あなたを助けてくれるはずです。

それでは、また次回のブログでお会いしましょう!ハッピーなデータベースライフを!

コメント

タイトルとURLをコピーしました