微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

消息应用数据设计不够高效

如何解决消息应用数据设计不够高效

我正在使用下表处理数据库

表格消息 ————————— ID - 身体 - 发件人 - 接收者 - IsSeen(布尔值)

桌间 ————————— ID - 姓名

表参与者 ————————— RoomID(来自 Room.Id 的外键) - UserId(来自 user.id 的外键)

用户 —————— ID - 姓名

如果有人在群聊(超过 2 个参与者的房间)中发送消息,而我想知道该群聊中的谁看到了该消息,我需要为该群聊中的每个用户插入相同的消息。 在群聊中,Message.Receiver=Room.IdMessage.Sender=User.Id。这种数据结构有效吗?有没有更好的方法来做到这一点? 想象一下,在 50 人的群聊中,发送的每条消息都会向数据库添加 50 行!这就是我认为缺乏这种数据结构的地方

解决方法

将您的所有 ID 字段称为 ID 会让读者感到困惑。

您的 Message 表应该只保存一条消息。

Message
-------
Message ID
Message text
Message timestamp

由于用户和消息之间存在多对多关系,因此您创建了一个联结表。

UserMessage
-----------
UserMessage ID (PK)
User ID
Message ID
Sender flag (Sender,Receiver)
Seen flag

其中 UserMessage ID 是主集群键,并且您在(用户 ID、消息 ID)上有一个唯一索引。您还可以在(消息 ID、用户 ID)上拥有唯一索引。 Sender 标志是一个布尔值,它告诉您用户 ID 是来自发送者还是接收者之一。 Seen 标志指示接收者是否已经看到消息。假设发件人已经看到了该消息。

在您的 50 人群聊中,您将有 1 个消息行和 51 个用户消息行。 UserMesssage 表是 3 个整数和 2 个布尔值,总共 14 个字节。即使有 3 个索引,您每行使用的字节数也可能少于 50 个。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。