Seria melhor, pois acelera a busca na ordenação nesta coluna. E as chaves estrangeiras são algo muito procurado.
Desde a versão 5 do Rails o índice será criado automaticamente, para mais informações veja aqui .
Não, isso já é feito por trilhos
Não, igual ao anterior
Então o índice é um índice combinado das duas colunas. Isso não faz sentido, a menos que você queira todas as entradas para um
category_id
E um state_id
(Deve ser category_id
não category
) ao mesmo tempo. Um índice como esse aceleraria a seguinte solicitação:
# rails 2
User.find(:all, :conditions => { :state_id => some_id, :category_id => some_other_id })
# rails 3
User.where(:state_id => some_id, :category_id => some_other_id)
Onde
add_index :users, :category_id
add_index :users, :state_id
irá acelerar esses pedidos:
# rails 2+3
User.find_by_category_id(some_id)
User.find_by_state_id(some_other_id)
# or
# rails 2
User.find(:all, :conditions => {:category_id => some_id})
User.find(:all, :conditions => {:state_id => some_other_id})
# rails 3
User.where(:category_id => some_id)
User.where(:state_id => some_other_id)
Não, porque se você fizer isso, apenas um usuário pode estar em uma categoria, mas o significado de categoria é que você pode colocar mais muitos usuário em uma categoria. Em seu
User
model você tem algo assim belongs_to :category
e no seu modelo de categoria algo como has_many :users
. Se você tiver um has_many
relacionamento a foreign_key
campo não deve ser único! Para obter informações mais detalhadas sobre isso, você deve dar uma olhada em tadman é ótimo resposta .