広告スペース(バナー)
🗄️SQL レッスン
SELECTの基礎6
データ操作とサブクエリ5
構文の基本を深める7
応用的な条件・結合7
検索とテーブル操作の応用6
高度なクエリ技法6
集計とデータ整合性6
仕上げの機能と応用6
レッスン 49 / 50

FOREIGN KEYでテーブル間の整合性を保とう

このレッスンでは、FOREIGN KEYを使ったテーブル間の整合性の保ち方を学び、存在しないデータへの参照を防げるようになることを目標にします。「SQL FOREIGN KEY 使い方」で調べている方向けです。

FOREIGN KEY(列) REFERENCES 別テーブル(列)を指定すると、その列には「参照先のテーブルに実際に存在する値」しか入れられなくなります。存在しないbook_idで貸出記録を作ってしまう、といったミスを防げます。

サンプルコードでは、loansテーブルのbook_id列にFOREIGN KEY(book_id) REFERENCES books(id)という制約を設定し、事前にPRAGMA foreign_keys = ON;で外部キー制約を有効にしています。存在しない本のIDで貸出記録を作ろうとすると、エラーになる仕組みです。

初心者がよくつまずくのが、SQLiteでは外部キー制約がデフォルトで無効になっている点です。PRAGMA foreign_keys = ON;を実行しないと、FOREIGN KEYを定義していても実際にはチェックが働かないため、この設定を忘れないようにしましょう。

この仕組みを「外部キー制約」と呼び、テーブル間のつながりの正しさをデータベース自身が保証してくれます。アプリケーション側のチェック漏れがあっても、最後の砦としてデータの整合性を守ってくれる重要な機能です。

SQL
OUTPUT / 実行結果

💡 初回実行時はSQLエンジンの読み込みに数秒かかります。

🎯
ここまでできればゴール達成!
テーブル同士の関連を保証する、正しいデータ設計ができるようになります。
広告スペース(バナー)
広告スペース(記事内)