Byłoby lepiej, bo przyspiesza wyszukiwanie w sortowaniu w tej kolumnie. A klucze obce są często wyszukiwane.
Od wersji 5 szyn indeks będzie tworzony automatycznie, więcej informacji znajdziesz tutaj .
Nie, to już jest wykonywane przez szyny
Nie, tak samo jak powyżej
Wtedy indeks jest połączonym indeksem dwóch kolumn. To nie ma sensu, chyba że chcesz, aby wszystkie wpisy dla jednego category_id
ORAZ jeden state_id
(Powinno to być category_id
nie category
) w tym samym czasie.
Indeks taki jak ten przyspieszyłby następujące żądanie:
# 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)
Gdzie
add_index :users, :category_id
add_index :users, :state_id
przyspieszy te żądania:
# 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)
Nie, ponieważ jeśli to zrobisz, tylko jeden użytkownik może należeć do jednej kategorii, ale znaczenie kategorii jest takie, że możesz umieścić więcej wielu użytkownika do jednej kategorii. W Twoim User
model masz coś takiego belongs_to :category
aw modelu kategorii coś takiego jak has_many :users
. Jeśli masz has_many
związek foreign_key
pole nie może być niepowtarzalne!
Aby uzyskać bardziej szczegółowe informacje na ten temat, zapoznaj się z tadmanem Świetny odpowiedz .