質問: モデルを作成するとき、 ``` rails g model BookAuthor book:references ``` と入力すると、マイグレーションファイルで ``` t.references :book, index: true, foreign_key: true ``` こういうのが作られます。 で、ここに出てくる index と foreign_key ってどういう意味なのでしょうか?調べても納得のいく説明がなされてなくてこまってます。
回答: マイグレーションの中にあることからもわかるように、これはデータベースに対する指示です。 `index`は、データベースに**インデックス**を付ける、という意味です。たとえば、この列で検索する、あるいはこの列を基準に並べ替える、という場合に、インデックスがあれば、全部のデータを調べずとも高速に行えます。ただし、インデックス自体もデータ容量や更新の際の処理が負荷となりますので、無闇矢鱈に付けても意味はありません。 `foreign_key`は、データベースに**外部キー制約**をかけるものです。これがあると、「データベースレベルで」`book_id`には`books.id`にある値しか入れられなくなります。`has_many`や`belongs_to`などを考える上で、「関連付けできないような値は絶対に来ない」という意味で、より安全なシステムを組めます。