Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
33
Help us understand the problem. What is going on with this article?
@shitake4

Railsマイグレーションのindex、foreign_keyの設定

More than 3 years have passed since last update.

migrationファイルを書いていて、index,foreign_keyの設定の仕方でハマったので、調べたことを共有できればと思います

インデックス(index)

インデックスの追加(add_index)

基本的な書き方

# add_index :対象のテーブル名, インデックス対象のカラム名    
  add_index :company, :company_name

複合インデックスの場合

# add_index :対象のテーブル名, インデックス対象のカラム名  
  add_index :company, [:company_code, :compnay_name]

オプション

  1. 別名をつける場合
# add_index :対象のテーブル名, インデックス対象のカラム名, :name インデックスの別名    
  add_index :company, :company_name, name: :hogehuga_fk

インデックスの削除(remove_index)

# remove_index :対象のテーブル名, インデックス名  
  remove_index :company, name: :company_name_fk

外部キー(foreign_key)

外部キーの追加(add_foreign_key)

基本的な書き方

# add_foreign_key :対象のテーブル, :指定先のテーブル  
  add_foreign_key :companies, :accounts

複合外部キーの場合

対応していなさそうなので、SQL書いて頑張るしかなさそうです…

execute <<-SQL.gsub(/^\s+/, '')
  ALTER TABLE companies
  ADD company_type VARCHAR(255) NOT NULL DEFAULT 'Alliance',
  ADD CONSTRAINT companies_fk
  FOREIGN KEY (companies_division_id, company_type, company_id)
  REFERENCES company_divisions (id, company_type, company_id);
  SQL

オプション

  1. カラムの指定
# add_foreign_key :対象のテーブル, :指定先のテーブル, :column :対象のカラム名  
  add_foreign_key :companies, :accounts, column: :hoge_id
  1. 別名をつける場合
 # add_foreign_key :対象のテーブル, :指定先のテーブル, name: :foreign_keyの別名  
   add_foreign_key :companies, :accounts,  name: :huga_id

外部キーの削除(remove_foreign_key)

# remove_foreign_key :対象のテーブル, :指定先のテーブル  
  remove_foreign_key :companies, :accounts
33
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
shitake4
Railsのコードリーディングとかやってます https://blog.shitake4.tech
globis
グロービスは 1992 年の創業以来、社会人を対象とした MBA、人材育成の領域で Ed-Tech サービスを提供し、現在は日本 No.1 の実績があります。これらの資産と、さらに IT や AI を活用することで、アジア No.1 を目指しています。

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
33
Help us understand the problem. What is going on with this article?