Bylo by to lepší, protože to urychluje vyhledávání v řazení v tomto sloupci. A cizí klíče jsou něco, co se hodně hledá.
Od verze 5 rails bude index vytvářen automaticky, další informace naleznete zde .
Ne, to už dělají koleje
Ne, stejně jako výše
Pak je index kombinovaným indexem dvou sloupců. To nedává žádný smysl, pokud nechcete všechny položky pro jeden category_id
A jeden state_id
(Mělo by to být category_id
nikoli category
) ve stejnou dobu.
Index, jako je tento, by urychlil následující požadavek:
# 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)
Kde
add_index :users, :category_id
add_index :users, :state_id
urychlí tyto požadavky:
# 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)
Ne, protože pokud to uděláte, v jedné kategorii může být pouze jeden uživatel, ale význam kategorie je ten, že můžete vložit více mnoha uživatele do jedné kategorie. Ve vašem User
model máte něco takového belongs_to :category
a ve vašem modelu kategorie něco jako has_many :users
. Pokud máte has_many
vztah foreign_key
pole nesmí být jedinečné!
Pro podrobnější informace o tom byste se měli podívat na tadman skvělý odpovědět .