【入門編】 外部キー制約 – Cloud Spanner

こんにちは。Cloud Spannerの世界へようこそ。
大規模なシステムを支えるこの「究極のデータベース」を学ぼうとしているあなたの姿勢、素晴らしいですね。

今回は、Spannerを語る上で避けては通れない、でも一番「親しみやすい」機能である「外部キー制約」についてお話しします。

難しい技術用語は一旦横に置いて、日常の出来事に例えながら、その「本質」を紐解いていきましょう。

—

1. そもそも「外部キー」って何?(身近な例え話)

想像してみてください。あなたは巨大な図書館の管理人です。そこには「利用者カード」の台帳と、「貸出記録」の台帳の2つがあります。

  • 利用者台帳:誰が登録されているかのリスト
  • 貸出記録:誰がどの本を借りているかのリスト

ここで問題です。もし「利用者台帳」に載っていない架空の人物が、「貸出記録」に名前を連ねていたらどうでしょう? あるいは、貸出中の本があるのに、その利用者が勝手に「利用者台帳」から消えてしまったら?

図書館の運営はめちゃくちゃになりますよね。

この「貸出記録は、必ず存在する利用者の名前でなければならない」というルールを強制するのが「外部キー制約」です。Spannerでは、この「データの整合性(=つじつまが合っていること)」をシステムが自動的に守ってくれるのです。

—

2. Spannerにおける「守護神」の役割

Cloud Spannerは、世界中のユーザーが同時にアクセスしてもデータが壊れないように設計された、とてつもなく強力なデータベースです。そんなSpannerにとって、外部キー制約は「データの守護神」のようなもの。

具体的にどう守ってくれるのか、ルールを見てみましょう。

  • 無許可の書き込みを防ぐ:存在しないユーザーIDで貸出記録を作ろうとすると、Spannerが「そんな人は登録されていませんよ!」と門前払いしてくれます。
  • 勝手な削除を防ぐ:本を借りている利用者を、無理やり「退会」させようとしても、「まだ本を返していないので消せません!」と阻止してくれます。

—

3. 「ON DELETE CASCADE」という魔法

さて、ここからが少しだけエンジニアっぽい話です。
先ほどの図書館の例で、「利用者が退会したら、その人の貸出履歴も一緒に削除してほしい」というケースがあるかもしれません。

これを手動でやると大変ですが、Spannerには`ON DELETE CASCADE`という魔法の設定があります。

これをつけると、親となる「利用者」が消された瞬間、子である「貸出記録」も自動的に消滅します。「親が去れば、子供(紐づくデータ)も整理される」という、非常にスマートな仕組みです。

実際に書いてみましょう

— 利用者テーブル(親)
CREATE TABLE Users (
UserId INT64 NOT NULL,
Name STRING(MAX),
) PRIMARY KEY (UserId);

— 貸出記録テーブル(子)
CREATE TABLE Loans (
LoanId INT64 NOT NULL,
UserId INT64 NOT NULL,
BookTitle STRING(MAX),

— ここが外部キー!
— UsersテーブルのUserIdと紐づけます
CONSTRAINT FK_Loans_Users FOREIGN KEY (UserId) REFERENCES Users(UserId)

— 「ON DELETE CASCADE」をつけると、
— 利用者が消えたら、その人の貸出記録も自動で消えます!
ON DELETE CASCADE
) PRIMARY KEY (LoanId);

—

4. なぜSpannerでこれを使うのか?

世の中にはたくさんのデータベースがありますが、Spannerで外部キーを使う理由は「分散環境でもデータの正しさを一切妥協しないから」です。

普通、データベースが世界中に広がっていると、データの整合性を守るのは非常に難しいのですが、Spannerは独自の技術でそれを実現しています。この「外部キー」を適切に設定しておくことで、「大規模なのに、矛盾が一切ない美しいデータ」を保つことができるのです。

—

まとめ:ここさえ押さえれば大丈夫!

今回お伝えしたかったのは、以下の3点だけです。

1. 外部キーは「データのつじつま」を守るための約束事。
2. 設定しておけば、プログラムでわざわざチェックしなくてもSpannerが勝手に守ってくれる。
3. `ON DELETE CASCADE`を使えば、データの掃除も自動化できる。

これさえ理解できれば、あなたはもうSpannerのデータベース設計の第一歩を完璧に踏み出せています。

最初は難しく感じるかもしれませんが、データベースは「データの図書館」です。利用者が迷わないように、そして貸出記録が矛盾しないように整えてあげる。その優しさが、結果として最高のシステムを作るんですよ。

これからも一緒に、Spannerの深淵を覗いていきましょうね。応援しています!

コメント

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