はじめに
初学者のアウトプット記事です。
アドバイス指摘あればどうぞよろしくお願いします。
外部キー
外部キーは異なるテーブルのレコードと関係性(リレーション)を持つ場合に必要なカラムです。主キー同様に識別子の役割を持ちますが、他のテーブルのレコードを識別するために使います。
例
外部キー(foreign_key)は関連する他のテーブルのレコードの主キーを値として持つカラムです。外部キーは他のテーブルのレコードとの関係性を表すために用います。
matching(出会い系)テーブルには2名の人間がいます。主キーになるカラムはid。
id | name | |
---|---|---|
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だ理解が必要です。