Lược đồ bạn đã mô tả sẽ rất hiệu quả cho loại truy vấn mà bạn quan tâm, miễn là bạn đặt các chỉ mục chính xác trên bảng của mình. Cơ sở dữ liệu không hoạt động giống như danh sách:đặt câu hỏi "XXX đã tham gia vào những giao dịch nào" không nên quét toàn bộ bảng, bởi vì một bảng được lập chỉ mục chính xác sẽ biết chính xác nơi để tìm tất cả các giao dịch của XXX.
Để thiết lập điều này một cách chính xác, đây là giao diện của quá trình di chuyển của bạn:
class CreateStandardUsers < ActiveRecord::Migration
def change
create_table :standard_users do |t|
t.string :name
t.timestamps
# More fields go here
end
add_index :standard_users, :name
end
end
class CreateDeals < ActiveRecord::Migration
def change
create_table :deals do |t|
t.references :admin_user
# other fields go here
end
add_index :deals, :admin_user_id
# other indices go here... anything you want to search on efficiently.
end
end
class CreateDealParticipations < ActiveRecord::Migration
def change
create_table :deal_participations do |t|
t.references :standard_user
t.references :deal
t.timestamps
end
add_index :deal_participations, :standard_user_id
add_index :deal_participations, :deal_id
add_index :deal_participations, :created_at
end
end
Vẫn còn rất nhiều thứ khác thuộc về những lần di chuyển này (ví dụ:bạn nên thêm các ràng buộc không null, ràng buộc duy nhất, v.v.). Nhưng vấn đề là việc có các chỉ số này làm cho các hoạt động cơ sở dữ liệu mà bạn đang mô tả cực kỳ nhanh chóng.