Postgres存储多个ID

时间:2014-07-14 10:59:15

标签: php postgresql

我开始设计一个大型项目 - 类似于Facebook。我遇到了需要解决以下问题的情况。

当您在发布时选择Facebook,选择谁可以看到帖子。 (你可以查看能看到帖子的朋友,我需要和这些朋友一起工作)

而且我不想处理类似的风格

非常糟糕的方式(仅举例)

post_id | visible_user_ id 
5       | 15,25,156,489,21,56,41,56,21,56,1465 ... 

这种方法很好,但表可能有数百万条记录

post_id | visible_user_id 
5       | 15 
5       | 25 
5       | 156 

问题是:我进入哪个方式或者没有相似的经历?我想找到最快的解决方案,您如何看待序列化字符串?

1 个答案:

答案 0 :(得分:2)

包含所有ID的序列化字符串是一个非常糟糕的主意

为什么?

那么,在这个字符串中,您将拥有每个用户的所有ID,可以看到该帖子对吗?如果你删除其中一个,那么你需要再次恢复该用户的所有朋友才能更新该字段吗?删除一个用户的工作太多了,如果你想添加另一个用户(另外一个朋友),那就相同了

另一方面,该字段类型应为TEXT类型,以便为拥有大量朋友的用户存储。

首先,我可以告诉你我将如何做到这一点:

首先,我将制作表格,usersusers_friendspostsusers_posts

  • 用户:user_id
  • users_friends :user_id,friend_id(friend_id将是users表的外键)
  • 帖子:post_id,post_visualization
  • users_posts :user_id,post_id

通过这四个表,您将解决该问题:

  1. 您网站中的用户注册=>插入users表格
  2. 用户添加一个朋友=> afaik朋友应该在你的users表中,所以在users_friends表中插入用户的id和朋友的id
  3. 用户只为好友发一条帖子=>然后在post_visualization字段中插入值为FRIENDS(例如)的帖子。
  4. 你想知道应该看到一个朋友的所有帖子=>加入这四个表,你就会得到这个价值
  5. 删除一位朋友=>从表格users_friends
  6. 中删除

    我认为这应该让你有一个想法从项目开始,祝你好运

    如果有什么不清楚只是评论