Det skulle vara bättre, eftersom det påskyndar sökningen vid sortering i den här kolumnen. Och främmande nycklar är något man letar efter mycket.
Sedan version 5 av rails kommer indexet att skapas automatiskt, för mer information se här .
Nej, detta görs redan med räls
Nej, samma som ovan
Då är indexet ett kombinerat index av de två kolumnerna. Det är inte meningsfullt, om du inte vill ha alla poster för ett category_id OCH ett state_id (Det ska vara category_id inte category ) samtidigt.
Ett index som detta skulle påskynda följande begäran:
# 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)
Var
add_index :users, :category_id
add_index :users, :state_id
kommer att påskynda dessa förfrågningar:
# 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, för om du gör detta kan bara en användare vara i en kategori, men meningen med kategori är att du kan lägga till fler många användare i en kategori. I din User modell du har något sånt här belongs_to :category och i din kategorimodell något som has_many :users . Om du har en has_many relation foreign_key fältet får inte vara unikt!
För mer detaljerad information om detta bör du ta en titt på tadman är fantastiskt svara .