我正在编写一个应用程序,它具有与Google圈子/ FB好友列表类似的某些功能。我应该如何构建这个组/角色模式?
- 用户可以把他们知道的人到一群人(家族,同事,朋友等) (现在组不能嵌套)
- 用户可以将消息发送到组(S),设定每组隐私设置等
- 在一个职位组内共享,这些群体的用户可以发表评论,并看到其他人的评论,无论他们与其他人的关系(即组内)
现在,我们正在使用关系数据库(mysql),因为有些限制随着时间和资源。无论如何,我试图找到构建我们的数据库来平衡性能和清晰度的最佳方式。下面是我们目前有:
users:
user_id
default_group_id
friend_group_id
groups:
group_id
groups_to_users:
user_id
group_id
messages:
message_id
messages_to_groups:
message_id
group_id
galleries_to_groups:
gallery_id
group_id
首次创建一个用户,他/她将有2个基地群:
- 将只包含单个用户
- 的默认组朋友组,其中将包含他/她与朋友的所有人
我们将简单地使用group_id来确定“许可”,而不是使用user_id。这样我们可以跳过查询2个表格的复杂性。
与此同时,通过上述结构,我们也遇到了查询用户收到的所有消息的障碍,因为如果此用户有100个朋友,我们可能必须查询至少100个组。所以现在我们用这个相当黑客的方法来解决这个问题:
如果用户发送消息给一个组,然后我们浏览这个组中的成员列表并保存每个用户的记录(message_id,(default_ )GROUP_ID)。问题是,如果这个组拥有1000多个成员,那么我们将不得不为每个发送到这个组的新消息插入1000多条记录,并且当这个用户对组成员进行任何修改时,我们也必须更新大量的记录。
我想知道是否有更好的方法来构建我们的数据库来提高性能?
Nageswara Rao,请您详细说明如何将数据存储在数据库中?我有点慢在这里 – mr1031011
您可以通过在groups_to_users引入一些冗余 例 users_to_groups --------------- USER_ID --->用户ID <解决用例冗余数据,以避免查询用户和组表> USER_ID --->组识别符号 messages_to_group ----------------- GROUP_ID - > MESSAGE_ID USER_ID --- > message_id 所以,如果你想让一个组的成员通过group_id查询groups_to_users –