【问题标题】:best way to store user's "favorites" in MySQL在 MySQL 中存储用户“收藏夹”的最佳方式
【发布时间】:2012-06-04 18:52:06
【问题描述】:

我有一个照片库。我想添加“添加到收藏夹”按钮 - 这样用户就可以将其他用户添加到他/她的收藏夹中。然后我希望每个用户都能够看到他最喜欢的用户列表,以及能够看到谁(用户列表)将此用户添加到收藏夹。

我找到了两种方法,第一种是:

faver_id faved_id
1       10
1       31
1       24 
10      1
10      24

我不喜欢这种方法,因为 1) 大量重复 2) 未来非常大的表(如果一个至少有 1001 个用户,并且每个用户都喜欢其他 1000 个用户 = 1 001 000 条记录),我想这会减慢我的基础。

第二种方式是:

user_id   favs
1          1  23 34 56 87 23
10         45 32 67 54 34 88 101

我可以在 php 中获取这些收藏并explode() 或者通过 MySQL 查询 select count(user_id) from users where favs LIKE '% 23 %' and user_id=10; 搜索用户是否喜欢其他用户

但我觉得第二种方式在 MySQL 方面不是很“正确”。

你能给我一些建议吗?

【问题讨论】:

    标签: mysql


    【解决方案1】:

    考虑一下。您反对使用第一种方法的论点是您的表可能会变得太大,但您接着说,如果您使用第二种方法,您可以运行通配符查询来查找 包含 内容的字段。

    第二种方法强制进行全表搜索,并且不可索引。使用第一种方法,您只需在每个列上添加索引,就可以了。第一种方法比第二种方法可扩展很多,muchmuch。由于缩放似乎是您唯一关心的第一个问题,我认为答案是显而易见的。

    采用第一种方法。多对多表在任何地方都被使用,这是有充分理由的。

    编辑:

    另一个问题是第二种方法将维护数据库的大量工作交给了应用程序。在某些情况下这很好,但您所说的情况是数据库 擅长 的事情。你只会重新发明轮子,而且很糟糕。

    【讨论】:

    • 非常感谢您提供如此清晰的解释。是的,我忘了我可以在第一种情况下添加表索引,它可以解决数千条记录的问题。
    • @oyatek:没问题。我很乐意提供帮助。
    【解决方案2】:

    肯定会选择第一种方式。

    【讨论】:

      【解决方案3】:

      嗯,当你想删除或进行更改时,第二种方法并不容易,但就 MySQL 而言它没问题。 不过,Joomla 甚至在名为 params 的同一字段中包含不同的信息日期。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-27
        • 1970-01-01
        • 2013-09-10
        相关资源
        最近更新 更多