想象一个电子商务网站,用户可以在其中创建自己的商店。
我正在为此类网站设计内部消息传递系统,目前我对如何在数据库方面实现它犹豫不决。
需要支持以下场景:
- [u => u] 用户可以向其他用户发送消息;
- [u => s] 用户可以向商店发送消息;
- [s => u] 商店可以向用户发送消息;
- [s => uu]商店可以向所有顾客发送消息。
如果我只有一个简单的 Messages
表,而一家商店想要向 10,000 名用户广播一条消息,我将需要一次插入 10,000 条类似的记录。
另一种方法是将PersonalMessages
和BroadcastMessages
分开,并引入BroadcastMessageReceivers
“映射”表。但是,这种方法使处理单个消息变得复杂,例如删除、显示收件箱和发件箱等。
考虑到我使用的是 Entity Framework 和 MS SQL 2008,是否有推荐的选项?
最佳答案
如果您希望每个用户能够独立管理其收件箱的内容,您必须将广播消息作为一组单独的消息(或某些 M:N 关系)来处理 - 每个用户都必须有自己的记录,这样如果他删除消息来自收件箱的其他用户不会受到影响。实现取决于您想要处理广播的方式——您是否需要处理广播消息本身?然后你需要单独的实体类型。
如果你想使用 Entity 框架,请确保你有用于广播的存储过程。存储过程将获取消息、发件人和商店,并为所有目标用户创建记录。直接通过 EF 执行此操作会非常慢。
关于entity-framework - 可以广播消息时,消息系统如何组织数据库表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6135881/