外部キー(foreign key) という用語は、下の二つの意味で用いられるので混乱しやすい。
- あるテーブルが、他のテーブルを参照している時、参照元のカラム(またはその組)のこと。
- 上のカラムが持つべき制約のこと。外部キー制約 とも言う。レコードの作成/更新/削除がなされたとき「参照先のレコードが見つからない」ようなレコード(=迷子のレコード)を作らないようにする制約。
SQL では、CREATE
文もしくはALTER TABLE
文の中で、 FOREIGN KEY
句を使って外部キー制約を与えることができる。細かい指定がない場合、レコードの作成に対する制約だけがかかる。
Rails では migration のファイルに add_foreign_key
メソッドを使って外部キー制約を与えることができる。オプションを与えない場合は、やはりレコードの作成に対する制約だけがかかる。
参考
http://b.pyar.bz/blog/2014/10/21/foreigner/
http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/SchemaStatements.html#method-i-add_foreign_key
http://www.postgresql.jp/document/9.3/html/ddl-constraints.html#DDL-CONSTRAINTS-FK
http://www.postgresql.jp/document/9.3/html/sql-createtable.html#SQL-CREATETABLE-EXCLUDE