LoginSignup
11
12

More than 3 years have passed since last update.

外部キー(foreign_key: true)

Posted at

はじめに

初学者のアウトプット記事です。
アドバイス指摘あればどうぞよろしくお願いします。

外部キー

外部キーは異なるテーブルのレコードと関係性(リレーション)を持つ場合に必要なカラムです。主キー同様に識別子の役割を持ちますが、他のテーブルのレコードを識別するために使います。

外部キー(foreign_key)は関連する他のテーブルのレコードの主キーを値として持つカラムです。外部キーは他のテーブルのレコードとの関係性を表すために用います。

matching(出会い系)テーブルには2名の人間がいます。主キーになるカラムはid。

id name email
1 おっさん hugahuga@cmail
2 美少女 hogehoge@gmail

matchingテーブルと関係性を持つテーブルとして所持金テーブルがあると仮定します。
所持金テーブルにはそれぞれの人に対する所持金が保存されています。

id money matching_id
1 1000円 2
2 5000円 1

所持金テーブルのidは主キーです。その他にmatching_idという属性が存在します。所持金テーブルでは、このmatching_idは外部キーに当たります。これはその所持金を持った人のレコードの主キーと対応しています。
つまり所持金テーブルのidが1であるレコードはmatchingテーブルのidが2であるレコードと対応しており、このことから「美少女の所持金は1000円である」ことが分かります。

制約

テーブルのカラムに対して制約をかけることで不正なデータや予期せぬデータが保存されることを防ぐことができます。
制約とは特定のデータの保存を許さないためのバリデーションです。例えば同じメールアドレスのユーザーを登録できないようにする、名前のデータが空のユーザーを保存できないようにするといったことができるようになります。

外部キー制約

外部キー制約は、外部キーの対応するレコードが必ず存在しなくてはいけないという制約です。外部キーのカラムに値があっても、その値を主キーとして持つ他のテーブルのレコードがなければいけません。

今回もハマったのですが。
今回は外部キーのカラムに値があったが、その値を主キーとして持つ他のテーブルのレコードがなかったためにエラーが発生してたりseaquel proにてデータベースへのレコード書き込みができませんでした。
そこのレコードを先に書いて値を入れといてあげると、特に問題なくレコード追加したりできました。

他にもnot null規制とかもあるんですが今回はこれにて。
mだ理解が必要です。

11
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
12