首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Facebook-Timeline系统在数据库上应该是什么样子?

Facebook-Timeline系统在数据库上应该是什么样子?
EN

Stack Overflow用户
提问于 2013-06-21 21:11:56
回答 2查看 1.5K关注 0票数 1

我如何存储用户的“帖子”?这样我就可以有效地从数据库中获取它们,然后处理它们,以便在请求特定用户页面时按时间顺序显示它们?

我是否将所有用户的所有帖子存储在一个表中,如下所示:

代码语言:javascript
复制
Post ID | Poster ID | Post Content | Posted to this Users Wall | Post Timestamp

然后,当用户打开UserFoo的页面时,我只得到Posted to this Users Wall = UserFoo的所有行

上面的示例不会让桌子变得笨重吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-21 21:18:17

你提出的布局看起来很合理。5列(4个INT和1个TEXT),根本不是一个“庞大”的表。

如果您有适当的索引,那么查询WHERE "Posted to this Users Wall" = "UserFoo"实际上是即时的。

对于您的目标查询(按时间顺序显示发送到当前用户墙上的帖子),最好的索引可能是(Posted to this Users Wall, Post Timestamp) (一个两列索引)。

票数 2
EN

Stack Overflow用户

发布于 2013-06-21 21:17:54

users

代码语言:javascript
复制
id | name |

posts

代码语言:javascript
复制
|  id   |   u_id    |   content    |

wall

代码语言:javascript
复制
| id   |   u_id    |  post_id    |

来自posts的u_id是users.id,它是作者

来自wall的u_id是users.id,它是目标(张贴在墙上)

你可以给它起个更清晰的名字,比如poster_id,target_id

另一种方法是让

post

代码语言:javascript
复制
| id | poster_id |

wall

代码语言:javascript
复制
| id | post_id  | target_id |

content

代码语言:javascript
复制
|  post_id | content |

您还可以添加其他特定的内容,例如,如果帖子是另一个表中的注释或其他内容,或者是post表中的列

代码语言:javascript
复制
function getUsersWallPosts($target_id) {
    $query = "SELECT c.content FROM content AS c, INNER JOIN wall AS w ON w.post_id = c.post_id WHERE w.target_id = $target_id";
    $result = someUserDefinedFunctionForQueryAndFetch($query);
    return $result
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17236123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档