如何为两个不同实体之间的复杂消息系统设计表?
Posted
技术标签:
【中文标题】如何为两个不同实体之间的复杂消息系统设计表?【英文标题】:How to design tables for a complicated messaging system between two different entities? 【发布时间】:2019-08-26 23:27:50 【问题描述】:我正在开发一个包含消息传递系统的 Web 应用程序。 Web 应用程序有一个基本实体(用户),用户可以在应用程序中拥有另一个实体(公司),每个公司可能有多个用户(将其视为团队的员工)。用户可能不一定与公司有关系。公司必须与至少一个用户有关系。
我正在尝试在应用程序内创建一个消息传递系统(更多的是应用程序内电子邮件系统而不是聊天)系统。但是,消息系统对谁可以向谁发送消息有一定的限制:
用户可以向公司发送消息 公司可以向用户发送消息 公司可以向公司发送消息我们将为用户和公司提供两个不同的收件箱/发件箱。这意味着在仪表板中,如果用户拥有一家公司,他将拥有一个指向他自己的用户收件箱的页面,以及一个用于他公司收件箱的页面。
我的问题是确定发送者和接收者的实体,我似乎无法为消息表找到一个好的可维护表设计。 下面是 users 表、companys 表和 company_users 表的结构:
我想到的设计(实施后我认为这不是最好的设计)是每行都有一个sender_user_id
字段和一个sender_company_id
字段。如果sender_user_id
为空,而sender_company_id
已设置。这意味着此消息的发件人是一家公司,反之亦然。接收器也是如此。下面是messages表的设计
有没有人想到更好的设计?也许更可维护的东西?这目前是后端的关系地狱。谢谢。
【问题讨论】:
所以用户不能向用户发送消息? 【参考方案1】:以 Microsoft ExchangeServer 及其单实例存储为例,我认为您缺少的是指针。
如果您的用例回到单个发件人可以向单个收件人发送单个消息,那么我认为您的架构几乎会成功。
如果您希望某个人(例如公司管理员)能够向公司的所有成员发送消息,那么您的实际意思是:
“我希望公司管理员将指向邮件的指针发送给公司的所有当前成员”。
我的意思是,当他们发送消息时,他们实际上是在为原始消息创建 message_pointers。这样,当收件人删除“邮件”时,他们实际上所做的只是删除了他们对该邮件的个人引用。
这有帮助吗?
【讨论】:
以上是关于如何为两个不同实体之间的复杂消息系统设计表?的主要内容,如果未能解决你的问题,请参考以下文章
如何为特定令牌、颤振、firebase 消息传递和 node.js 发送通知