ユーザーが読んだ記事を追跡する機能を実装しています。
create_table "article", :force => true do |t|
t.string "title"
t.text "content"
end
これがこれまでの私の移行です:
create_table :user_views do |t|
t.integer :user_id
t.integer :article_id
end
user_viewsテーブルは、常に1つだけではなく、両方の列を検索するために照会されます。私の質問は私のインデックスがどのように見えるべきかです。これらのテーブルにいくつかのオプションがある場合、これらのテーブルの順序に違いはありますか?私のターゲットDBはPostgresです。
add_index(:user_views, [:article_id, :user_id])
ありがとう。
更新:
両方の列に同じ値を含む行は1つしか存在できないため(user_idがarticle_idを読み取ったかどうかを知るため)、: uniqueオプションを検討する必要がありますか?私が誤解していないのであれば、それは自分でチェックする必要がなく、ユーザーが記事にアクセスするたびに挿入するだけです。
「user_viewsテーブルは、常に1つだけではなく、両方の列を検索するために照会されます。」-「このユーザーが表示したすべての記事を検索する」、または「この記事を表示したすべてのユーザーを検索する」クエリはありませんか?それは驚くべきことです。
—
David Aldridge 2015