具有类似 Facebook 的群组的系统的数据库设计

Posted

技术标签:

【中文标题】具有类似 Facebook 的群组的系统的数据库设计【英文标题】:Database Design for a system that has Facebook like groups 【发布时间】:2016-12-13 13:20:49 【问题描述】:

我正在创建一个具有组的系统。这些可以被认为是 Facebook 群组。用户可以创建新组。目前我有以下类型的组:

城市组 - 基于某个城市的组。例如“伦敦买卖集团” 学校组 - 基于学校的组。例如“伦敦大学学习小组” 兴趣组 - 与地点无关的组。例如“50 岁以上的针织组”

将来会添加更多组类型。每个组可以有不同类型的选项,但所有组都有相同的基本数据:

身份证 创建者 ID 一个名字 选项说明

我正在为此努力整合数据库设计。我最初的想法是为不同的组创建不同的表。

例如,有一个名为group 的表。此表有idcreator idnamedescriptionmember counttimestamps

然后有其他表来代表其他组,并将它们链接到group。所以我有一个city_group 表,其中包含idgroup_idcity_id。其他组类型也是如此。

我遇到的唯一问题是interest_group 没有普通group 的任何额外数据。但是为了能够只查询兴趣组,我认为创建一个interest_group 表可能是有意义的。它只会有以下列:idgroup_idtimestamps ... 仅仅为此目的而有一个表似乎有点浪费。

这是一个让事情变得更容易的图表:

我的解决方案有什么问题,或者有什么更好的方法来解决这个设计问题?

【问题讨论】:

你有一些预定义类型的组吗?如果用户创建一个新组会发生什么?会是利益集团吗?或者您是以后唯一可以添加群组的人? 用户创建的组将是city groupinterest group。只有管​​理员可以创建school groups。未来还会有其他类型的群组,例如代表运动队的sports group等。 您在这里遇到的有趣问题。这些组中的成员呢?用户和组之间会有用户表和链接表吗? @RaulCuth 是的,会有一个表user_groupuser_idgroup_id 链接起来。 这个设计困扰我的是,如果你从 Group 表中查看一个组,你不知道究竟是哪个组类型表匹配它。 【参考方案1】:

我有一个想法,基本上是一种解决方法:有另一个表,例如:group_type,其中有 id(PK),然后有 tablename(类型的完整表名)。

然后,您应该有一个来自 Group 表的 FK 链接到该 group_type 表。

id    tablename
--------------------
1     School Group
2     Interest Group

完成所有这些后,您可以根据该表中的值构建查询,例如:

JOIN (SELECT tablename FROM group_type WHERE id=group.group_type_id) ON ..

【讨论】:

以上是关于具有类似 Facebook 的群组的系统的数据库设计的主要内容,如果未能解决你的问题,请参考以下文章

加入群组的 Facebook Graph Api

显示 Facebook 群组的 IOS 应用程序

skpy 向用户提及的群组发送消息

使用考拉获取Facebook群组的Feed

Linux 命令(162)—— newgrp 命令

linux中如何用指令将用户加入到群组中