具有类似 Facebook 的群组的系统的数据库设计
Posted
技术标签:
【中文标题】具有类似 Facebook 的群组的系统的数据库设计【英文标题】:Database Design for a system that has Facebook like groups 【发布时间】:2016-12-13 13:20:49 【问题描述】:我正在创建一个具有组的系统。这些可以被认为是 Facebook 群组。用户可以创建新组。目前我有以下类型的组:
城市组 - 基于某个城市的组。例如“伦敦买卖集团” 学校组 - 基于学校的组。例如“伦敦大学学习小组” 兴趣组 - 与地点无关的组。例如“50 岁以上的针织组”将来会添加更多组类型。每个组可以有不同类型的选项,但所有组都有相同的基本数据:
身份证 创建者 ID 一个名字 选项说明我正在为此努力整合数据库设计。我最初的想法是为不同的组创建不同的表。
例如,有一个名为group
的表。此表有id
、creator id
、name
、description
、member count
、timestamps
。
然后有其他表来代表其他组,并将它们链接到group
。所以我有一个city_group
表,其中包含id
、group_id
、city_id
。其他组类型也是如此。
我遇到的唯一问题是interest_group
没有普通group
的任何额外数据。但是为了能够只查询兴趣组,我认为创建一个interest_group
表可能是有意义的。它只会有以下列:id
、group_id
、timestamps
... 仅仅为此目的而有一个表似乎有点浪费。
这是一个让事情变得更容易的图表:
我的解决方案有什么问题,或者有什么更好的方法来解决这个设计问题?
【问题讨论】:
你有一些预定义类型的组吗?如果用户创建一个新组会发生什么?会是利益集团吗?或者您是以后唯一可以添加群组的人? 用户创建的组将是city group
和interest group
。只有管理员可以创建school groups
。未来还会有其他类型的群组,例如代表运动队的sports group
等。
您在这里遇到的有趣问题。这些组中的成员呢?用户和组之间会有用户表和链接表吗?
@RaulCuth 是的,会有一个表user_group
将user_id
与group_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 的群组的系统的数据库设计的主要内容,如果未能解决你的问题,请参考以下文章