建立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结构的主要内容,如果未能解决你的问题,请参考以下文章

应用Mongoose开发MongoDB模型(models)

Solr 配置文件之schema.xml

Solr 配置文件之schema.xml

PostgreSQL - 查询表结构和索引信息

PostgreSQL - 查询表结构和索引信息

数据库系统的结构