こんにちは!データベースの世界へようこそ。
「データベースの設計」とか「正規化」なんて言葉を聞くと、なんだか難しそうな参考書を想像しちゃいますよね。でも、実はこれ、皆さんが普段やっている「整理整頓」と全く同じ考え方なんです。
今日は、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は、皆さんの「整理整頓」を全力でサポートしてくれる頼もしいツールです。ぜひ、楽しみながら実験してみてくださいね。
また次の記事でお会いしましょう!何か気になったことがあれば、いつでもコメント欄で教えてくださいね。
コメント