建立Wall系统的数据库/Schema结构
Posted
技术标签:
【中文标题】建立Wall系统的数据库/Schema结构【英文标题】:Database / Schema structure to build a Wall system 【发布时间】:2011-06-17 12:28:36 【问题描述】:我一直在研究如何用php搭建一个类似FB的墙系统。
我们计划使用 ODM (Mandango, MongoDB) 而不是常规的 ORM (mysql) 来实现这一点。有朋友告诉我收件箱/发件箱系统。
收件箱是朋友发布到您墙上的所有消息 发件箱是您发布的所有消息为什么?因为如果你关注一个用户会更简单,你只会关注他的“发件箱”
每次我在墙上发布一些东西时,这条消息都会复制给我的每个关注者(这会产生大量数据)。 但是当一个朋友收到我的帖子时怎么办。他会在哪个实体上评论我的帖子?我的还是他的(因为内容是重复的)?
你怎么看? 你有没有想过这样的问题?你有什么答案吗? 谢谢
【问题讨论】:
有a few potential dups这个散落在SO上(也检查数据库+社交网络)。查找与活动流、活动源以及可能的审计日志相关的问题。 【参考方案1】:这就是您如何设置数据库的全部内容。我对 MySql 的经验有限,所以我的回答与此有关。在这种情况下,我至少会有这三个表:
-用户(每个用户都有一个唯一的 id)
-消息:这包括“收件箱”和“发件箱”消息。您可以将它们全部放在一个表中的原因是,如果您正在关注某人,它只会提取那些具有(这是曾经的列)“原始用户 ID”和(这可能是另一列)“接收用户”的消息id”或类似的东西。您如何处理数据将全部使用 php 或 asp 或您拥有的。
-Comments:这包含所有帖子的所有 cmets,并包含与其相关的消息的唯一 id 的列。
开发系统时要记住的一件事是,您永远不想复制数据。所以,当你在墙上发帖时,你不想在你的数据库中为所有关注你的人创建重复的消息,你希望 php 为你处理传播这些信息。
【讨论】:
我想这比“从不重复数据”更复杂。想想当朋友删除另一个朋友状态时。使用重复数据,您只需删除原始数据而不影响其他视图。两种方法都有优点/缺点以上是关于建立Wall系统的数据库/Schema结构的主要内容,如果未能解决你的问题,请参考以下文章