适用于一对多或多对多的facebook风格帖子的mySQL表格设计

时间:2012-02-27 16:46:56

标签: mysql many-to-many one-to-many

我正在尝试构建/设计一个表格,该表格可用于类似于谷歌+的帖子/评论系统,可以支持双向的一对多/多对多关系。我目前所拥有的是

member_id, 
post_id, 
post_body, 
post_date, 
post_flagged, 
post_shared, 
post_likes
  • member_id =我的会员ID
  • post_id =我的自动增量列,为每个帖子提供唯一ID
  • post_body =实际帖子
  • post_flagged =我打算稍后构建的审核系统的一部分
  • post_shared =某种形式的分组ID(不知道这将如何工作,但想一想 谷歌+圈子)
  • post_likes =分组的member_id谁喜欢这个帖子。

我有一个与上面几乎相同的评论表,除了它在上面列出的那些上面的一个comment_id作为其自动判罪列。

我目前最终在这里寻求的是一个健全性检查。上面的构造/模式看起来是否可行?你会以任何方式添加/删除/更改它吗?如果不是/或如果是。任何人都可以建议做post_shared列的好方法吗?是否存在某种类型的对象或在该列中存储数据的方式,这些对象或方法可用于Google+圈子的逻辑?

2 个答案:

答案 0 :(得分:1)

post_shared不应该在主帖表中。

对于规范化的解决方案,您需要一个circles表,一个users表,一个posts表和一些关联表来判断哪些是相关的 - 类似于

user_circles
post_circles

答案 1 :(得分:1)

根据我的理解,您的post_shared专栏就是这里真正有用的内容。假设您有一个针对5个“圈子”的帖子(我们将从谷歌窃取这个词)。您如何在当前设置中指出?

在一个字段中执行此操作的唯一方法是{1, 2, 3, 4, 5},其中这些数字是圆圈ID。这不是一个很好的做法。

我能看到实现这一目标的最佳方式是拥有此架构:

  • 帖子:post_id, post_body, post_flagged, post_likes
  • 圈子:circle_id, ...
  • PostCircles:post_id, circle_id

PostCircles表格会显示哪些帖子对哪些圈子可见。在上面的示例中,PostCircles表中有5行。假设帖子ID是1:

post_id    |    circle_id
1               1
1               2
1               3
1               4
1               5

然后,您可以使用查询语言显示相应的帖子,具体取决于查看者所在的圈子(请注意,此答案中未显示用户架构)。