ํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์กฐ์ธ ํ ์ด๋ธ์ ์์ฑํ๋ ๊ฒฝ์ฐ:
rails g migration create_join_table_showroom_user showroom user
๋ค์ ๋ง์ด๊ทธ๋ ์ด์ ์ด ์์ฑ๋ฉ๋๋ค.
class CreateJoinTableShowroomUser < ActiveRecord::Migration
def change
create_join_table :showrooms, :users do |t|
# t.index [:showroom_id, :user_id]
# t.index [:user_id, :showroom_id]
end
end
end
์ด ๋ง์ด๊ทธ๋ ์ด์ ์ ์ง์ ์คํํ๋ฉด ๋งค์ฐ ๊ฐ๋จํ ์กฐ์ธ ํ ์ด๋ธ์ด ์์ฑ๋ฉ๋๋ค.
create_table "showrooms_users", id: false, force: :cascade do |t|
t.integer "showroom_id", null: false
t.integer "user_id", null: false
end
๋ฐ๋ผ์ ์ธ๋ฑ์ค, ์ธ๋ ํค ๋ฑ์ด ์์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์์ ๋ ์ค์ ์ฃผ์ ์ฒ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ฉด ์ด์ ๋ค์์ ์ป์ต๋๋ค.
create_table "showrooms_users", id: false, force: :cascade do |t|
t.integer "showroom_id", null: false
t.integer "user_id", null: false
end
add_index "showrooms_users", ["showroom_id", "user_id"], name: "index_showrooms_users_on_showroom_id_and_user_id", using: :btree
add_index "showrooms_users", ["user_id", "showroom_id"], name: "index_showrooms_users_on_user_id_and_showroom_id", using: :btree
์์ฑ๋ ๋ง์ด๊ทธ๋ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
class CreateJoinTableShowroomUser < ActiveRecord::Migration
def change
create_join_table :showrooms, :users do |t|
# t.references :showroom, index: true, null: false, foreign_key: true
# t.references :user, index: true, null: false, foreign_key: true
# t.index [:showroom_id, :user_id]
# t.index [:user_id, :showroom_id]
end
end
end
๋ ๊ฐ์ references
ํ์ ์ฃผ์ ์ฒ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๋ฉด ์์ฑ๋ ํ
์ด๋ธ์ ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
create_table "showrooms_users", id: false, force: :cascade do |t|
t.integer "showroom_id", null: false
t.integer "user_id", null: false
end
add_index "showrooms_users", ["showroom_id"], name: "index_showrooms_users_on_showroom_id", using: :btree
add_index "showrooms_users", ["user_id"], name: "index_showrooms_users_on_user_id", using: :btree
add_foreign_key "showrooms_users", "showrooms"
add_foreign_key "showrooms_users", "users"
๋๊ตฐ๊ฐ๊ฐ ์กฐ์ธ ํ ์ด๋ธ์์ ์ธ๋ ํค์ ์ธ๋ฑ์ค๋ฅผ ์ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? @rafaelfranca
๋๋ ๋์ํ๋ค! ๋๋ ํญ์ ์ด๊ฒ์ ํด์ผ ํ๋ค. ๋ค์๊ณผ ๊ฐ์ด ์์ฑ๊ธฐ์ ์ต์
์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
rails g migration ... --fk --idx
๋๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํฌํจํ๊ณ ๋ค์๊ณผ ๊ฐ์ด ๋นํ์ฑํํ๋ ์ต์
์ด ์์ต๋๋ค.
rails g migration ... --no_fk --no_idx
๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์
์ ๋๋ถ๋ถ ๊ทธ๋ฐ ์ต์
์ ์ฌ์ฉํ์ง ์์ต๋๋ค. :index
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ ์ธ๋ฑ์ค๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ฌ๋ฆฌ๋ค
rails g migration create_join_table_showroom_user showroom:index user:index
์์ฐํ๋ค
class CreateJoinTableShowroomUser < ActiveRecord::Migration
def change
create_join_table :showrooms, :users do |t|
t.index [:showroom_id, :user_id]
t.index [:user_id, :showroom_id]
end
end
end
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ธ์ ์์ฑํ ๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ:
rails g migration CreatePost title:string user:references:index
๋ค์์ ์์ฑํฉ๋๋ค.
class CreatePost < ActiveRecord::Migration
def change
create_table :posts do |t|
t.string :title
t.references :user, index: true, foreign_key: true
end
end
end
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ํ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
rails g migration create_join_table_showroom_user showroom:references:index user:references:index
์ด๊ฒ์ ๋ง๋ค๊ธฐ:
class CreateJoinTableShowroomUser < ActiveRecord::Migration
def change
create_join_table :showrooms, :users do |t|
t.references :showroom, index: true, foreign_key: true
t.references :user, index: true, foreign_key: true
# t.index [:showroom_id, :user_id]
# t.index [:user_id, :showroom_id]
end
end
end
๊ทธ๋ฌ๋ฉด ๊ธฐ๋ณธ rails g migration create_join_table_showroom_user showroom user
๋ ๋ค์์ ์์ฑํฉ๋๋ค.
class CreateJoinTableShowroomUser < ActiveRecord::Migration
def change
create_join_table :showrooms, :users do |t|
# t.references :showroom, index: true, foreign_key: true
# t.references :user, index: true, foreign_key: true
# t.index [:showroom_id, :user_id]
# t.index [:user_id, :showroom_id]
end
end
end
+1 @erullmann ์ด๊ฒ์ ๋งค์ฐ ์ข์ ์๋ฃจ์ ์ ๋๋ค. :์ค๋ง์ผ๋ฆฌ:
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ง์ด๊ทธ๋ ์ด์ ์ ๋๋ถ๋ถ ๊ทธ๋ฐ ์ต์ ์ ์ฌ์ฉํ์ง ์์ต๋๋ค.
:index
๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฏธ ์ธ๋ฑ์ค๋ฅผ ํ์ฑํํ ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ฌ๋ฆฌ๋ค์์ฐํ๋ค
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ธ์ ์์ฑํ ๋ ์ฐธ์กฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ:
rails g migration CreatePost title:string user:references:index
๋ค์์ ์์ฑํฉ๋๋ค.
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ํ์ฉํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
rails g migration create_join_table_showroom_user showroom:references:index user:references:index
์ด๊ฒ์ ๋ง๋ค๊ธฐ:
๊ทธ๋ฌ๋ฉด ๊ธฐ๋ณธ
rails g migration create_join_table_showroom_user showroom user
๋ ๋ค์์ ์์ฑํฉ๋๋ค.