用于在朋友之间共享内容的mysql设计

时间:2014-04-11 10:01:14

标签: php mysql codeigniter database-design relational-database

我正在开发像Facebook这样的社交网络,但它特别针对可以加入的用户。无论如何,我必须为他/她可以发布内容的每个用户做一个Facebook风格的墙。 (我在发布文字,照片和视频的第一步即将到来)。

现在,用户应该能够定义与谁分享帖子,朋友' '所有'只是我'。

每个用户都可以属于一个也有自己的帖子墙的机构。该研究所还应该能够与用户组分享帖子。

所以我的问题:

如何为此工作设计MySQL表?

我拥有的是:

  • 用户表:user_id,....
  • 朋友表:iduser_idfriend_idstatus
  • 帖子表:post_iduser_idpost_titlepost_contentpost_date
  • 评论表:comment_iduser_idpost_idcomment_textcomment_date

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。一种简单的方法是创建一个表,用于定义每个帖子可以具有的可见性类型:

CREATE TABLE PostVisibilityType
(
    visibility_id, //primary key
    visibility_type // friend, all, private etc...
)

更新帖子表的架构,使visibility_id显示此帖子的可见性类型,即“仅限朋友”,“私人”等

posts table: post_id, user_id, visibility_id,...

对于机构,您需要设置一个表来定义您的组,因此需要UserGroup表并将该表的ID分配给User表,以便您可以标记用户所属的组。对于机构,您可以使用名为“组”的可见性类型,该类型仅允许该组中的用户查看帖子。

当用户登录并希望查看属于用户X的帖子时,您必须选择与该帖子关联的ID并确定可见性。如果它是私人的,阻止。如果是朋友,请确定登录用户是否为朋友。如果'全部',请允许查看。

您可能想要考虑的另一件事是使用像Neo4j这样的图形数据库。它们允许非常容易地指定这些类型的关系/关联。