Sarebbe meglio, perché accelera la ricerca nell'ordinamento in questa colonna. E le chiavi esterne sono qualcosa che si cerca molto.
Dalla versione 5 di rails l'indice verrà creato automaticamente, per ulteriori informazioni vedere qui .
No, questo è già fatto su rotaie
No, come sopra
Quindi l'indice è un indice combinato delle due colonne. Questo non ha alcun senso, a meno che tu non voglia tutte le voci per un category_id
E un state_id
(Dovrebbe essere category_id
non category
) contemporaneamente.
Un indice come questo velocizzerebbe la seguente richiesta:
# 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)
Dove
add_index :users, :category_id
add_index :users, :state_id
accelererà queste richieste:
# 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)
No, perché se lo fai, un solo utente può essere in una categoria, ma il significato di categoria è che puoi metterne più molti utente in una categoria. Nel tuo User
modello hai qualcosa del genere belongs_to :category
e nel tuo modello di categoria qualcosa come has_many :users
. Se hai un has_many
relazione con la foreign_key
il campo non deve essere univoco!
Per informazioni più dettagliate su questo dovresti dare un'occhiata a tadman è fantastico risposta .