こんにちは!データベースの世界へようこそ。
今日は、アプリを作るときに誰もが一度は悩む「データの名前(ID)の付け方」について、ちょっとお話ししましょう。
皆さんは、Webサイトのユーザー登録や注文履歴を作る時、データの「背番号」をどうやって決めていますか?「1, 2, 3…」と順番に番号を振る方法(連番)が一般的ですよね。でも、実はこの連番、データが数百万、数千万と増えてくると、意外な落とし穴があったりするんです。
そこで登場するのが「UUID」という魔法の文字列です。
—
そもそも、なんで連番じゃダメなの?
例えば、あなたがカフェの店員さんだとしましょう。お客さんに整理券を配るとき、「1番の方、2番の方…」と渡すのはとてもスムーズですよね。でも、もしお店が世界中にあって、全店舗の整理券をひとつの巨大なノートに記録しなきゃいけないとしたら?
「A店もB店も『1番』を発行しちゃった!」なんてパニックになりますよね。また、連番だと「次は100番だ」と予測できてしまうので、悪い人に「次は101番目のデータを盗んでやろう」と狙われるリスクもあります。
ここでUUIDの出番です。UUIDは、いわば「世界でひとつだけの、めちゃくちゃ長いランダムな文字列」のこと。
UUIDってどんなもの?
UUIDは、こんな感じの文字列です。
`550e8400-e29b-41d4-a716-446655440000`
これ、パッと見ると暗号みたいで怖いですよね(笑)。でも、意味はすごくシンプル。「宇宙のどこで誰が作っても、絶対に他の誰とも被らない確率が極めて高い文字列」なんです。
これを使えば、たとえ世界中の支店が別々にデータを作っても、後から全部ひとつのデータベースに集めた時に「あ、IDが被ってる!」なんて事故が起きることはまずありません。
PostgreSQLで使ってみよう
PostgreSQLを使っているなら、UUIDの扱いは本当に簡単です。いちいち複雑なプログラムを書く必要はありません。
まずは、UUIDを使えるように魔法の呪文(拡張機能)を唱えます。
CREATE EXTENSION IF NOT EXISTS “uuid-ossp”;
そして、データを作る時には、こう書くだけ。
INSERT INTO users (id, name) VALUES (gen_random_uuid(), ‘田中さん’);
`gen_random_uuid()` というのが、「今すぐ世界でひとつだけのIDを作って!」という命令です。これを実行するたびに、PostgreSQLが自動的にさっきのような長い文字列を作って、田中さんの背番号にしてくれます。
ただし、ひとつだけ注意点!
UUIDはすごく便利でかっこいいんですが、ひとつだけ覚えておいてほしいことがあります。
それは、「インデックス(索引)が少しだけ重くなる」ということ。
本屋さんで例えると、連番(1, 2, 3…)は「ページ番号順」に並んでいるので探すのが楽ですが、UUIDは「ランダムに生成された長い名前」なので、本棚のどこに置けばいいか探すのに少し手間がかかるんです。
なので、「とりあえず全部UUIDにすればOK!」というわけではなく、
- 世界規模でデータを統合する可能性があるならUUID
- ひとつのアプリ内で完結して、速度を最優先したいなら連番
というふうに、状況に合わせて使い分けるのが「通」なやり方です。
—
まとめ:まずは使ってみよう!
難しい理論を並べましたが、まずは一度、自分のデータベースで `gen_random_uuid()` を試してみてください。自分の手で、世界にたったひとつしかないユニークなIDが生成されるのを見るのは、なんだか宝探しみたいでワクワクしますよ。
データベース設計は、まるで自分の街を作るようなもの。UUIDという新しい道具を手に入れて、ぜひ皆さんのデータという街を、もっと安全で広大なものにしていってくださいね。
また次回の記事でお会いしましょう!応援しています!
コメント