Es wäre besser, weil es die Suche beim Sortieren in dieser Spalte beschleunigt. Und nach Fremdschlüsseln wird viel gesucht.
Seit Version 5 von Rails wird der Index automatisch erstellt, weitere Informationen finden Sie hier .
Nein, das wird bereits von Schienen erledigt
Nein, wie oben
Dann ist der Index ein kombinierter Index der beiden Spalten. Das macht keinen Sinn, es sei denn, Sie wollen alle Einträge für eine category_id
UND eine state_id
(Es sollte category_id
sein nicht category
) gleichzeitig.
Ein Index wie dieser würde die folgende Anfrage beschleunigen:
# 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)
Wo
add_index :users, :category_id
add_index :users, :state_id
beschleunigt diese Anfragen:
# 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)
Nein, denn wenn Sie dies tun, kann nur ein Benutzer in einer Kategorie sein, aber die Bedeutung der Kategorie ist, dass Sie mehr viele hinzufügen können Benutzer in eine Kategorie. In Ihrem User
Modell haben Sie so etwas wie dieses belongs_to :category
und in Ihrem Kategoriemodell so etwas wie has_many :users
. Wenn Sie einen has_many
haben Beziehung der foreign_key
Feld darf nicht eindeutig sein!
Nähere Informationen hierzu finden Sie unter tadman ist großartig antworten .