Mysql
為“未見”查詢設計數據庫
我正在建構大量項目,我想從中查詢特定使用者以前從未見過的項目。我需要跟踪每個使用者,她/他看到了哪些項目。
目前,這些項目儲存在 mongodb 中,而我計劃將“看到的項目”儲存在 mysql 數據庫中。
我有兩個問題:
- 我應該如何設計項目數據庫以便有效地查詢某個使用者沒有看到的項目?
- 由於每個使用者可以“看到”幾千個項目,每個使用者應該有自己的 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)
和Items
withPRIMARY 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
獲取更多資訊。單獨使用者的單獨表 -否。這是一個常見的問題,每次都有相同的答案。