【入門編】 正規化の段階と設計原則 – PostgreSQL

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

「データベースの設計」とか「正規化」なんて言葉を聞くと、なんだか難しそうな参考書を想像しちゃいますよね。でも、実はこれ、皆さんが普段やっている「整理整頓」と全く同じ考え方なんです。

今日は、PostgreSQLという素晴らしい相棒を使って、どうすれば「散らからないデータ」を作れるのか、一緒に紐解いていきましょう。

—

データが「散らかる」ってどういうこと?

例えば、皆さんのスマホのメモ帳に「買い物リスト」を書く場面を想像してみてください。

もし、1つの行に「牛乳、卵、パン」と全部詰め込んだらどうでしょう? 後から「卵だけ買い忘れたかな?」と確認したいとき、すごく探しにくいですよね。

データベース設計における「正規化」とは、まさにこの「情報の整理整頓」のことなんです。

第1正規形:詰め込みすぎを直す

さっきの「1行に全部」の状態を、「1セルには1つの値だけ!」というルールに変えるのが第1正規形です。

  • 悪い例:`牛乳, 卵, パン`
  • 良い例:`牛乳`、`卵`、`パン`を別々の行に分ける。

これで、「何を買うべきか」が誰の目にも明らかになりますよね。

第2正規形:グループ分けを整理する

次に、例えば「商品名」と「その商品の売り場」を一緒に管理しているとします。でも、同じ商品が何度も出てくると、「売り場」が変わったときに全部書き直すのが大変ですよね。

「商品情報のテーブル」と「買い物リストのテーブル」を分ける。これが第2正規形的な発想です。「関係あるもの同士をまとめて、別の場所で管理する」。これだけで、更新のミスがぐっと減ります。

第3正規形:間接的な情報を追い出す

「商品ID」があれば「商品名」が分かるのに、わざわざ「商品名」をリストに書く必要はありませんよね。IDさえあれば、商品名テーブルを見ればいいんですから。

「AからBが分かり、BからCが分かる」というような、回りくどい持ち方をしている情報を外に出す。これが第3正規形です。

BCNF(ボイス・コッド正規形):プロのこだわり

これは少し専門的ですが、一言で言うと「決定ルールを厳しく守る」こと。
「この組み合わせなら、必ずこの値になる」という法則を、テーブル全体でピシッと統制するイメージです。ここまでやると、データに矛盾が起きる余地がほとんどなくなります。

—

PostgreSQLで「壊れない仕組み」を作る

整理整頓が終わったら、次はPostgreSQLの出番です。せっかく綺麗に並べたデータも、誰かが適当な値を入れちゃったら台無しですよね。そんなとき、PostgreSQLの「制約」という機能が守ってくれます。

1. CHECK制約:データの「番人」

「年齢にはマイナスの数値が入らないようにしたい」とか「価格は0円以上にしてほしい」といったルールを設けるのが `CHECK` です。門番を置いて、怪しいデータを通さないようにするイメージですね。

2. UNIQUE制約:被り防止の「名札」

例えば「メールアドレス」のように、「一人に一つだけ!」と決めたい項目には `UNIQUE` を使います。これで、誰かが同じ情報を二重登録するのを防げます。

3. FOREIGN KEY(外部キー):絆の証明

これが一番大事かもしれません。「注文テーブル」にある「顧客ID」が、実は「顧客リスト」に存在しない人だったら大問題ですよね。
「顧客リストに載っている人しか注文できないようにする」という親子関係の紐付けをするのが `FOREIGN KEY` です。これで、データ同士の整合性がガッチリ守られます。

—

最後に:完璧を目指さなくても大丈夫!

ここまで読んで「うわ、ルールがいっぱい…」と少しプレッシャーを感じたかもしれません。でも、安心してください。

最初から完璧な設計なんて、ベテランエンジニアでも難しいものです。まずは「同じ情報を何度も書かないようにしよう」とか「データが矛盾しないようにIDで繋ごう」という意識を持つだけで、あなたの作るデータベースは驚くほど美しく、強くなります。

PostgreSQLは、皆さんの「整理整頓」を全力でサポートしてくれる頼もしいツールです。ぜひ、楽しみながら実験してみてくださいね。

また次の記事でお会いしましょう!何か気になったことがあれば、いつでもコメント欄で教えてくださいね。

コメント

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