【发布时间】:2018-02-14 23:57:18
【问题描述】:
我有四个表:projects、posts、users 和 project_users。一些用户通过project_users 表连接到一些项目。每个项目都包含来自posts 表的一堆行。非常直接。
用户可以编辑帖子行,每次更新时都应该保存user id 和timestamp,以便其他用户可以看到新的和没有的。我应该将此信息保存到 1) 帖子行,为每一行保留最新的编辑器和时间,还是应该考虑 2) 一个完整的单独日志表?每种情况的好处是什么?
确定后,我想不时运行一个脚本,如果其他人更新了任何行(可怜的人的推动),它会刷新站点内容。给我一些观点。用 100 万个帖子询问数据库是否是一个很大的查询:“检查这个项目中是否有任何帖子在时间戳 x 之后更新了除您之外的任何用户”?只是问,因为我经常运行该查询。
一种更快的方法是将最新的编辑器记录到项目或项目用户行,但如果多人同时编辑,那么准确度会降低,并且也无法查看哪些行已更新。有意义吗?
【问题讨论】:
-
谢谢!但是项目表只保留一个编辑器和一个日期,这很高兴知道,但由于我每 x 秒检查一次更新,如果 2 人更新彼此太近,刷新将无效:用户 A 更新,5 秒稍后用户 B 更新,5 秒后用户 A 再次更新,5 秒后脚本检查用户 A 的更新,但是当用户 B 是最新的编辑器时脚本没有运行,因此用户 A 将错过该更新。
-
项目用户表包含有关谁连接到哪个项目的信息,因此无需将其放入用户表中。
-
好的,那么当项目更新时,与项目相关的用户会收到通知,这将防止您必须运行脚本来检查是否发生更新的情况。您甚至可以在更新发生后使用
SQL TRIGGERS获取相关的用户 ID 并通知他们。 -
您将如何通知他们?这需要 push 和 websockets 之类的东西吗?
-
考虑使用
sql triggers或在你的php代码中if (update successful){select where col=project_ID and col=user_ID and inform users}
标签: php mysql database database-design