我正在实现跟踪用户阅读过哪些文章的功能。
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表来查找两列,而不会只查找其中一列。我的问题是索引应如何显示。这些表的顺序是否有所不同,是否应该有更多选择或其他选择。我的目标数据库是Postgres。
add_index(:user_views, [:article_id, :user_id])
谢谢。
更新:
因为在两列中只能存在包含相同值的一行(因为要知道user_id是否已读取article_id),我应该考虑:unique选项吗?如果我没有记错的话,那意味着我不必自己进行任何检查,只需在用户每次访问文章时插入一下即可。
“将始终查询user_views表以查找两列,而不是仅查找一列。” -永远不会有“查找此用户已查看的所有文章”或“查找已查看此文章的所有用户”查询?我感到惊讶。
—
David Aldridge