我正在尝试设计具有私人聊天和群聊功能的数据库模式。这是我到目前为止所得到的:
所以 - 理论是,即使用户只是一对一的私人聊天,他们仍然被分配了'roomID',他们发送的每条消息都是room
。
为了找出他们所涉及的所有房间,我可以从表participants
中选择一个列表来查找。
这没关系,但是我觉得room
表有点多余,因为我不需要房间名称,我可以把它留下来,只需使用participants
表和SELECT DISTINCT roomID FROM particpants
找出各个房间。
任何人都可以向我解释一个更好的结构或为什么我应该保留房间的桌子?
我认为您可能需要稍微改进一下您的域模型 - 如果不这样,很难说您的架构是否“正确”。
以Slack为模型(注意 - 我没有对此做过大量的研究,所以细节可能有误),你可能会说你的系统有“聊天”。
聊天可以是公开的 - 即列出供所有用户查看和加入 - 或私人 - 即不为所有用户列出,并且仅可通过邀请获得。
公开聊天必须具有“名称”属性。私人聊天可能有也可能没有名称属性。
聊天可以有2..n参与者。
默认情况下,所有1-1聊天都以私密方式开始。
可以将私人聊天更改为公共聊天。
在这种情况下,你有一个继承/专业化关系 - “私人”和“公共”是“聊天”的子类型。