- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对 PHP 还是个新手,我想知道哪种替代方案会更好,或者有人可以建议更好的方法。
我有一组用户,我必须跟踪他们与帖子的所有互动。如果用户点击一个按钮,它会将帖子添加到列表中,如果他们再次点击它,它将删除该帖子,所以最好是:
在表中为每个用户(可能有数千个)存储一列 postID 的 JSON 数组。
-或-
每次保存(postID 和 userID 的组合)(可能数百万)都有一个单独的表,并返回与 userID 匹配的所有结果?
为了这个问题的目的,有两个表:表A是用户,表B是帖子。我应该如何存储所有用户保存的帖子?
编辑:抱歉,但我没有提到帖子将有多个用户交互,用户将有多个帖子交互(多对多关系)。我认为这会影响 Bob 的回答。
最佳答案
这是一个有趣的问题!
解决方案实际上取决于您的预期用例。如果每个用户都有一个他们标记的帖子列表,并且这就是您需要的所有信息,那么将这些列为用户表中的一个字段(或者如果您使用的是 nosql 后端,则在他们的 blob 中)将是方便的 -如果这是您的用例,这是一个可行的选择!)。传输时间不会受到影响,因为无论哪种方式,列表的大小都相同,但在此解决方案中,您可能会节省查找时间,因为您只使用一个表,而 dbs 将优化以将这些信息保持在一起。
另一方面,如果您必须能够为给定的帖子查询所有标记它的用户,那么选项二会好得多。在前一种方法中,您必须查询所有用户并查看是否每个人都有帖子。在此选项中,您只需找到所有关系并从那里开始工作。假设您有一个 user
表、一个 post
表和一个带有前两个表的外键的 user_post
表。还有其他方法可以做到这一点,但需要维护多个列表并每次都进行交叉检查,这是一组昂贵的操作并且容易出错。
请注意,后一个选项不应阻塞“数百万”个连接,因为数据库应该针对这种快速读取进行优化。 (专业提示:索引正确的列!)不过,请注意任何数据信息。一个不必要的 for 循环会降低您的性能。
关于PHP/MySQL : Storing a list or massive table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10921871/
我是一名优秀的程序员,十分优秀!