Би било по-добре, защото ускорява търсенето при сортиране в тази колона. А външните ключове са нещо, което много се търси.
Тъй като версия 5 на релсите, индексът ще бъде създаден автоматично, за повече информация вижте тук .
Не, това вече се прави с релси
Не, същото като по-горе
Тогава индексът е комбиниран индекс от двете колони. Това няма никакъв смисъл, освен ако не искате всички записи за един category_id
И един state_id
(Трябва да бъде category_id
не category
) едновременно.
Индекс като този би ускорил следната заявка:
# 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)
Къде
add_index :users, :category_id
add_index :users, :state_id
ще ускори тези заявки:
# 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)
Не, защото ако направите това, само един потребител може да бъде в една категория, но смисълът на категорията е, че можете да поставите повече много потребител в една категория. Във вашия User
модел имате нещо подобно belongs_to :category
и във вашия модел на категория нещо като has_many :users
. Ако имате has_many
връзка foreign_key
полето не трябва да е уникално!
За по-подробна информация относно това трябва да погледнете tadman е страхотен отговор .