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

Is there a scalability issue in having a one-to-many relationship between participants and conversation?

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

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

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

问题:需要很多连接

问题是每次我们想要获取ConversationParticipantsid来广播Messages时,我们都需要进行连接。

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

问题

可扩展,因为:

如果一次对话吸引了越来越多的用户(作为参与者),您只需在 table Participants 中添加行。假设对话有一个成员列表,它被称为 Participants.

如果一个用户帐户被删除,您只需在 table Participants 中搜索他的所有记录(相关对话)并将它们也删除。

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

关联实体

UserConversation 的成员关系或关系通过所谓的关联关系 桥接联想tableassociative entity。意味着一个 User 可以参加(参与)0 或多个 Conversations,反之亦然一个 Conversation 可以有(至少)一个(创建者)或许多参与 Users .

所以 entity/table Participants 就像一个 桥梁:连接两个 sides/perspectives.

广播示例

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

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