我正在开发一个包含消息传递系统的web应用程序。web应用程序有一个基本实体(用户),用户可以在应用程序中拥有另一个实体(公司),每个公司可能有多个用户(将其视为一个团队的员工)。用户可能不一定与公司有关系。公司必须与至少一个用户有关系。
我试图在应用程序中创建一个消息传递系统(更多的是应用程序内部的电子邮件系统,而不是聊天系统)。但是,消息传递系统对允许谁向谁发送消息有一定的限制:
我们将为用户和公司提供两个不同的收件箱/发件箱。意思是在仪表板内,如果用户拥有一家公司,他将有一个页面到他自己的用户收件箱,一个页面给他的公司收件箱。
我的问题是确定发送方和接收方的实体,我似乎无法为messages表找到一个良好的可维护表设计。下面是users表、companies表和company_users表的结构:



我想到的设计(在实现之后,我不认为这是最好的设计)是为每一行设置一个sender_user_id字段和一个sender_company_id字段。如果sender_user_id为null,则设置sender_company_id。这意味着该消息的发送方是一个公司,反之亦然。对接受者来说也是一样。下面是messages表的设计

有人想要更好的设计吗?更容易维护的东西?这是目前后台的关系地狱。谢谢。
发布于 2019-08-27 02:48:59
以微软ExchangeServer及其单一实例存储为例,我认为您缺少的是指针。
如果您的用例被缠绕回单个发件人,则可以向单个接收方发送一条消息,那么我认为您的模式将几乎完全正确。
如果你想让一个人(例如公司管理部门)能够向公司的所有成员发送信息,那么你实际上要说的是:
“我希望公司管理部门向公司的所有现任成员发送指向该信息的指示”。
我的意思是,当他们发送消息时,他们实际上是在为原始消息创建message_pointers。这样,当收件人删除“消息”时,他们实际上所做的就是删除对该消息的单独引用。
这有用吗?
https://stackoverflow.com/questions/57666011
复制相似问题