如何在mySQL表中存储多个用户的书签?

时间:2011-05-27 02:11:00

标签: mysql database-design

假设我有用户 U1,U1,U3 ...

和书签 B1,B2,B3 ....

如何最有效地存储书签。

每个用户都有自己的一组书签,这些书签会加载到他的页面上。然后,如果用户想知道还有谁拥有相同的书签,他可以选择该书签并查看同时拥有该书签的用户列表。

这只是关于一般设计的问题。如果到目前为止我的理解是正确的,这是一个多对多的关系。

1 个答案:

答案 0 :(得分:1)

常见的方法是使用第三个表(多对多关系),您还可以在此表中存储时间戳,以确定用户添加书签的时间或用户书签的用户特定注释。

这种方法的另一个好处是书签表不存储任何用户特定数据或具有重复条目(相同书签的4倍导致4个用户添加它)

+-------------------+
| bookmarks_users   |
|-------------------|
| id (int, primary) |
| user_id (int)     |
| bookmark_id (int) |
+-------------------+

选择一个用户的所有书签(只是一个基本查询 - 您可能应该加入所需的数据;)

SELECT bookmark_id
FROM bookmarks_users
WHERE user_id = 123

选择具有特定书签的所有用户

SELECT user_id
FROM bookmarks_users
WHERE bookmark_id = 123

显示将至少一个共同书签作为指定用户的用户(此查询非常糟糕(性能明智),但它很好地作为示例)

SELECT DISTINCT user_id
FROM bookmarks_users
WHERE bookmark_id IN(
    SELECT bookmark_id
    FROM bookmarks_users
    WHERE user_id = 123
)
AND user_id != 123

希望这有帮助 - 蒂姆