2012-11-20 21 views
11

Tôi có bảng đa hình được gọi là "Phiếu bầu", trong đó có phiếu bầu từ Câu trả lời và câu hỏi.Cách lập chỉ mục bảng đa hình trong đường ray không phải là duy nhất "hiệp hội_type" và "hiệp hội_id"

Votes

user_id  voteable_id voteable_type  value 

    1    2   Answer   1 
    2    2   Answer   1 

Trong trường hợp này, câu trả lời với id = 2 có hai phiếu lên.

Câu hỏi đặt ra là: Làm cách nào để lập chỉ mục bảng này?

cách tiếp cận thứ nhất:

add_index :votes, [:voteable_id, :voteable_type] 

này sẽ không làm việc bởi vì giá trị khóa trùng lặp ý vi phạm hạn chế duy nhất

cách tiếp cận thứ hai:

add_index :votes, :voteable_id, 
add_index :votes, :voteable_type 

này một Tôi đoán sẽ không có nhiều hiệu suất vì c truy vấn omposite cho id và loại cùng một lúc.

Thứ ba cách tiếp cận:

add_index :votes, [:user_id, :voteable_id, :voteable_type] 

là người cuối cùng này một tốt nhất? Có ba cột được lập chỉ mục quá nhiều không?

Cảm ơn

Trả lời

32

tiếp cận đầu tiên của bạn là một trong những quyền

add_index :votes, [:voteable_id, :voteable_type] 

miễn là bạn không thêm :unique => true nó sẽ không được độc đáo. Và bạn không nên làm cho nó độc đáo, vì điều này sẽ dẫn đến chỉ một phiếu bầu cho mỗi cử tri sẽ là có thể. Như Tashos ghi rõ trong phần nhận xét.

Cách tiếp cận thứ ba cũng sẽ hoạt động, và tại đây bạn có thể sử dụng hạn chế unique, vì vậy, mỗi người dùng chỉ có thể bỏ phiếu một lần cho mỗi cử tri.

+0

cảm ơn! Tôi không biết tại sao nó được tạo ra với duy nhất trong di cư trước đây của tôi. bây giờ nó đã làm việc – Luccas

+0

Có sự khác biệt nào giữa phương pháp tiếp cận đầu tiên và cách tiếp cận thứ hai hay chỉ là vấn đề cú pháp? – kibaekr

+0

Cách tiếp cận đầu tiên là chỉ số trên hai trường, cách tiếp cận thứ hai là hai chỉ mục riêng biệt. – RebeccaD

Các vấn đề liên quan