this question、回答とコメントを読んでいますが、それは私のケースに答えることはできません。外来キー?ここでRails 5.1&Postgres - 外部キーであるときに2つの列にユニークな制約を追加
は、問題のテーブルを作成するために、私のオリジナルの移行です:
class CreateTemplates < ActiveRecord::Migration[5.1]
def change
create_table :templates, id: :uuid do |t|
t.references :account, type: :uuid, foreign_key: true
t.string :name
t.text :info
t.string :title
t.timestamps
end
end
end
ACCOUNT_IDがFOREIGN_KEYである(と顧客を識別する)ので、それは、このテーブルの上に、ほぼすべて(99%)のクエリに表示されます。
validates_uniqueness_of :name, scope: [:account]
だから私は関節のインデックスを追加すると::
add_index :templates, [:name, :account_id], unique: true
私は削除する必要があります今では名前がアカウントに一意であるべきであると決められているので、モデルが更新されている
account_idのインデックス?
SQLLite(thisを参照)で、答えは、私はACCOUNT_IDに単一のインデックスを必要としないし、第一の位置にACCOUNT_IDと私の新しいインデックスを作成することになりそうなので、私は尋ねる:
add_index :templates, [:account_id, :name], unique: true
私はpostgresを使用しているので、同じ考えが適用されますか?
それで、Postgresは私がリンクしているSQLiteの例と同じように動作すると言っています。つまり、account_id foreign_keyインデックスを削除し、最初のインデックスとしてaccount_idを持つ新しいコンポジットを作成することができます。これは、dbが1つのインデックスのみを更新する必要があるため、挿入時のパフォーマンスが向上します。 – rmcsharry
あなたはそれを行うことができますが、あなたのコードがそれをどのように使用するかによって異なります。 'account_id'に基づいて最初に検索し、あなたのコードのどこにある名前に基づいていても、それを削除することができます。 –
ご清聴ありがとうございました。 – rmcsharry