Ce serait mieux, car cela accélère la recherche en triant dans cette colonne. Et les clés étrangères sont souvent recherchées.
Depuis la version 5 de rails, l'index sera créé automatiquement, pour plus d'informations, voir ici .
Non, cela se fait déjà par rails
Non, comme ci-dessus
L'index est alors un index combiné des deux colonnes. Cela n'a aucun sens, sauf si vous voulez toutes les entrées pour un category_id
ET un state_id
(Ce devrait être category_id
pas category
) en même temps.
Un index comme celui-ci accélérerait la requête suivante :
# 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)
Où
add_index :users, :category_id
add_index :users, :state_id
accélérera ces requêtes :
# 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)
Non, car si vous faites cela, un seul utilisateur peut être dans une catégorie, mais le sens de la catégorie est que vous pouvez en mettre plus beaucoup utilisateur dans une catégorie. Dans votre User
modèle vous avez quelque chose comme ça belongs_to :category
et dans votre modèle de catégorie quelque chose comme has_many :users
. Si vous avez un has_many
relation la foreign_key
le champ ne doit pas être unique !
Pour des informations plus détaillées à ce sujet, vous devriez jeter un œil à tadman c'est super répondre .