Ruby on rails 轨道5.1及;Postgres-在两列上添加唯一约束,其中一列是外键

Ruby on rails 轨道5.1及;Postgres-在两列上添加唯一约束,其中一列是外键,ruby-on-rails,postgresql,indexing,foreign-keys,Ruby On Rails,Postgresql,Indexing,Foreign Keys,所以我阅读、回答和评论,但它不回答我的问题,当列的一个是外键时该怎么办 以下是我创建相关表的原始迁移: 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

所以我阅读、回答和评论,但它不回答我的问题,当列的一个是外键时该怎么办

以下是我创建相关表的原始迁移:

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
因此,一旦我添加了联合索引:

add_index :templates, [:name, :account_id], unique: true
我应该删除帐户id上的索引吗

我这样问是因为在SQLLite(请参阅)中,答案似乎是我不需要account_id上的单个索引,而是要使用account_id在第一个位置创建我的新索引:

add_index :templates, [:account_id, :name], unique: true

我使用的是postgres,同样的想法也适用吗?

如果不是第一个索引,就必须添加额外的索引

所以如果你有这个:

add_index:templates,[:name,:account_id],unique:true

然后您不应该删除原始的
:account\u id
外键索引,因为它是第二个索引


我建议您阅读有关索引实现的内容。它非常有趣,你可以从中学到很多东西。

如果它不是第一个索引,你必须添加额外的索引

所以如果你有这个:

add_index:templates,[:name,:account_id],unique:true

然后您不应该删除原始的
:account\u id
外键索引,因为它是第二个索引


我建议您阅读有关索引实现的内容。这很有趣,你可以从中学到很多东西。

你是说Postgres的工作方式与我链接的SQLite示例相同。这意味着我可以删除account\u id foreign\u key索引并创建一个新的组合,account\u id作为第一个索引…这将在插入时提供更好的性能,因为db只需要更新一个索引,对吗?您可以这样做,但这取决于您的代码如何使用它。如果您首先根据
帐户\u id
进行搜索,然后根据代码中所有地方的名称进行搜索,那么可以删除它。因此,您是说Postgres的工作方式与我链接到的SQLite示例相同。这意味着我可以删除account\u id foreign\u key索引并创建一个新的组合,account\u id作为第一个索引…这将在插入时提供更好的性能,因为db只需要更新一个索引,对吗?您可以这样做,但这取决于您的代码如何使用它。如果首先根据
帐户\u id
进行搜索,然后根据代码中所有位置的名称进行搜索,则可以删除它。
add_index :templates, [:account_id, :name], unique: true