在参与者和对话之间建立一对多关系是否存在可伸缩性问题?



我有一个数据库设计,如下面的实体关系图(ERD(所示:

https://app.dbdesigner.net/designer/schema/0-social_media-00a3405c-0bcd-4809-9f8e-e86c1b8e5f33

我想知道我是否应该在ParticipantsConversation之间建立一对多的关系。

问题:需要多个联接

问题是,每次我们想要获得ConversationParticipantsid来广播Messages时,我们都需要加入。

不仅如此,我们还需要Messagescontent,这意味着我们需要在三个表之间进行两个连接。

问题

  • 有没有更具可扩展性的解决方案?
  • 是否存在任何瓶颈问题?
  • 除了作为额外的奖励之外,桌子还有什么问题吗?
可扩展,

因为:

如果一个对话吸引了越来越多的用户(以参与者的身份(,您只需在表格中添加行Participants。想象一下,对话有一个成员列表,它被称为Participants

如果删除了一个用户帐户,您只需在表Participants中搜索他的所有记录(关联的对话(并删除它们。

这两种情况都意味着对Participants的修改,而对话保持不变。

关联实体

UserConversation的这种成员资格或关系通过所谓的关联关系关联表或关联实体来桥接。意味着一个User可以参加(参与(0个或多个Conversations,反之亦然,一个Conversation可以(至少(有一个(创建者(或许多参与Users

因此,实体/表Participants就像一座桥梁:连接两侧/视角。

广播示例

用户A想要向频道/对话1广播消息。现在,系统需要确定所有收件人。因此,仅在表参与者中查找对话1,并找到他们的参与者用户ABC。除发送方A外,所有都应接收广播:BC

没有涉及任何加入一个简单的查询SELECT user_id FROM participants WHERE conversation_id = 1 AND user_id <> 'A'。给定Message并假设user_id可以直接用作目的地(电子邮件地址、电话号码等(,系统可以立即发送广播。

相关内容

最新更新