4
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

外部キーと rails の add_foreign_key の意味

外部キー(foreign key) という用語は、下の二つの意味で用いられるので混乱しやすい。

  1. あるテーブルが、他のテーブルを参照している時、参照元のカラム(またはその組)のこと。
  2. 上のカラムが持つべき制約のこと。外部キー制約 とも言う。レコードの作成/更新/削除がなされたとき「参照先のレコードが見つからない」ようなレコード(=迷子のレコード)を作らないようにする制約。

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

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
4
Help us understand the problem. What are the problem?