Nó sẽ tốt hơn, bởi vì nó tăng tốc độ tìm kiếm trong việc sắp xếp trong cột này. Và Khoá ngoại là thứ được tìm kiếm rất nhiều.
Vì Phiên bản 5 của rails, chỉ mục sẽ được tạo tự động, để biết thêm thông tin, hãy xem tại đây .
Không, điều này đã được thực hiện bởi rails
Không, giống như trên
Sau đó, chỉ mục là một chỉ mục kết hợp của hai cột. Điều đó không có ý nghĩa gì, trừ khi bạn muốn tất cả các mục nhập cho một category_id
VÀ một state_id
(Nó phải là category_id
không phải category
) đồng thời.
Chỉ mục như thế này sẽ đẩy nhanh yêu cầu sau:
# 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)
Ở đâu
add_index :users, :category_id
add_index :users, :state_id
sẽ tăng tốc các yêu cầu này:
# 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)
Không, bởi vì nếu bạn làm điều này, chỉ một người dùng có thể ở trong một danh mục, nhưng ý nghĩa của danh mục là bạn có thể đặt thêm nhiều người dùng vào một danh mục. Trong User
của bạn mô hình bạn có một cái gì đó giống như thế này belongs_to :category
và trong mô hình Danh mục của bạn giống như has_many :users
. Nếu bạn có has_many
mối quan hệ với foreign_key
trường không được là duy nhất!
Để biết thêm thông tin chi tiết về điều này, bạn nên xem tại tadman thật tuyệt câu trả lời .