Det ville være bedre, fordi det fremskynder søgningen i sorteringen i denne kolonne. Og fremmednøgler er noget, der søges meget efter.
Siden version 5 af rails vil indekset blive oprettet automatisk, for mere information se her .
Nej, det sker allerede med skinner
Nej, det samme som ovenfor
Så er indekset et kombineret indeks over de to kolonner. Det giver ingen mening, medmindre du vil have alle poster for én category_id
OG én state_id
(Det skal være category_id
ikke category
) på samme tid.
Et indeks som dette ville fremskynde følgende anmodning:
# 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)
Hvor
add_index :users, :category_id
add_index :users, :state_id
vil fremskynde disse anmodninger:
# 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)
Nej, for hvis du gør dette, kan kun én bruger være i én kategori, men meningen med kategori er, at du kan sætte flere mange bruger i én kategori. I din User
model du har noget som denne belongs_to :category
og i din kategorimodel noget som has_many :users
. Hvis du har en has_many
forhold foreign_key
felt må ikke være unikt!
For mere detaljeret information om dette bør du tage et kig på tadman 's store svar .