1

所以目前我有一个“帖子”,用户可以在其中发布消息,例如在 facebook 或 twitter 中。然而,到目前为止,用户只能查看他们自己发布的消息。

这是当前的表设计

ID | username | message | datetime

但是,我有一个“一般”区域,我不仅想显示来自用户自己的消息,还想显示来自“朋友”的消息。

到目前为止,我还没有设计如何存储“友谊”。我正在考虑为每个用户创建单独的表来存储他们的朋友,尽管我不知道这是否是一个可行的解决方案。否则我应该如何设计“友谊”关系?

所以我的问题是,

  1. 我应该如何设计一个“朋友”的数据库关系

  2. 我应该如何从与当前用户成为朋友的所有用户那里检索消息?

4

2 回答 2

1

如果您没有特别需要使用关系数据库,我建议您考虑使用图形数据库,该数据库专为处理数据可以是定向的(单向的,例如喜欢和评论或双向的,例如友谊)的情况而设计和优化。

我对这些数据库没有经验,但您的起点(就研究而言)可能是 Neo4j,它是一个似乎很流行的图形数据库。

在关系方面,您需要一个Friends具有 PK user_id 和 FK friend_id 的表,两者都与您的 user_id 字段上的用户表相关。每个关系需要两个条目(因为友谊是双向的)。

于 2013-06-24T02:02:23.107 回答
0

我的建议是不要在您的帖子表中使用“用户名”。字符串比较比整数比较慢几倍。改为存储“user_id”。

在您的“朋友”表中存储以下列:

user_id | friend_id 

然后要从用户和他的朋友那里获取消息,您可以执行以下操作:

SELECT * FROM posts WHERE user_id IN (SELECT friend_id FROM friends WHERE user_id = your_users_id) OR user_id = your_users_id

这可能非常简单,具体取决于您使用的语言和/或框架。

祝你好运!

于 2013-06-24T02:15:18.033 回答