Mysql

為“未見”查詢設計數據庫

  • March 15, 2016

我正在建構大量項目,我想從中查詢特定使用者以前從未見過的項目。我需要跟踪每個使用者,她/他看到了哪些項目。

目前,這些項目儲存在 mongodb 中,而我計劃將“看到的項目”儲存在 mysql 數據庫中。

我有兩個問題:

  1. 我應該如何設計項目數據庫以便有效地查詢某個使用者沒有看到的項目?
  2. 由於每個使用者可以“看到”幾千個項目,每個使用者應該有自己的 mysql 表還是應該只有一個大表?

編輯:使用者獲得的項目來自使用者未見過的項目集合,是隨機選擇的

數據說你需要

CREATE TABLE Seen (
   user_id ...,
   item_id ...,
   PRIMARY KEY(user_id, item_id),
   INDEX      (item_id, user_id)
) ENGINE=InnoDB;

那就是除了 table Users, withPRIMARY KEY (user_id)Itemswith PRIMARY KEY (item_id)

使用者 1234 未看到的項目:

SELECT i.item_id
   FROM Items AS i
   LEFT JOIN Seen AS s  ON  s.item_id = i.item_id
                        AND s.user_id = 1234;
   WHERE s.item_id IS NULL ;

然後,您可以JOIN訪問Users和/或Items獲取更多資訊。

單獨使用者的單獨表 -。這是一個常見的問題,每次都有相同的答案。

引用自:https://dba.stackexchange.com/questions/132222