ガイドに従って、次のコマンドを実行しました。
Rails g migration CreateSnippetsUsers snippet:belongs_to user:belongs_to
これにより、次の移行が作成されました。
class CreateSnippetsUsers < ActiveRecord::Migration[5.0]
def change
create_table :snippets_users do |t|
t.belongs_to :snippet, foreign_key: true
t.belongs_to :user, foreign_key: true
end
end
end
過去に同じことを見たことがありますが、index: true
の代わりに foreign_key: true
。 2つの違いは何ですか?
インデックスは、データベーステーブルでのデータ取得操作の速度を向上させます。 index: true
を任意の列に書き込むと、この列にデータベースインデックスが追加されます。たとえば、私はテーブルを作成していました:
create_table :appointments do |t|
t.references :student, index: true
end
appointments
テーブルにstudent_id
列を作成します。
外部キーには異なるユースケースがあり、それはテーブル間の関係です。別のテーブルのインデックスに関連する1つのテーブルのインデックスを宣言し、いくつかの制約を課すことができます。データベースはこの関係のルールを適用して、参照整合性を維持します。たとえば、2つのテーブルprofiles
とeducations
があり、プロファイルには多くの教育がある場合があります。
create_table :educations do |t|
t.belongs_to :profile, index: true, foreign_key: true
end
これで、educations
テーブルの外部キーであるprofiles
テーブルにprofile_id
列ができました。 educations
テーブルに存在するprofile_id
値が含まれていない限り、レコードはprofiles
テーブルに入力されません。したがって、参照整合性は維持されます。