Sería mejor, porque acelera la búsqueda en la clasificación en esta columna. Y las claves foráneas son algo que se busca mucho.
A partir de la versión 5 de Rails, el índice se creará automáticamente, para obtener más información, consulte aquí .
No, esto ya se hace por rieles
No, igual que arriba
Entonces el índice es un índice combinado de las dos columnas. Eso no tiene ningún sentido, a menos que desee todas las entradas para un category_id
Y uno state_id
(Debería ser category_id
no category
) al mismo tiempo.
Un índice como este aceleraría la siguiente solicitud:
# 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)
donde
add_index :users, :category_id
add_index :users, :state_id
acelerará estas solicitudes:
# 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, porque si haces esto, solo un usuario puede estar en una categoría, pero el significado de categoría es que puedes poner más muchas usuario en una categoría. En tu User
modelo tienes algo como esto belongs_to :category
y en su modelo de categoría algo como has_many :users
. Si tienes un has_many
relación la foreign_key
¡El campo no debe ser único!
Para obtener información más detallada sobre esto, debe consultar tadman es genial respuesta .