聊天的数据库模式:私有和组

问题描述 投票:2回答:2

我正在尝试设计具有私人聊天和群聊功能的数据库模式。这是我到目前为止所得到的:

enter image description here

所以 - 理论是,即使用户只是一对一的私人聊天,他们仍然被分配了'roomID',他们发送的每条消息都是room。 为了找出他们所涉及的所有房间,我可以从表participants中选择一个列表来查找。

这没关系,但是我觉得room表有点多余,因为我不需要房间名称,我可以把它留下来,只需使用participants表和SELECT DISTINCT roomID FROM particpants找出各个房间。

任何人都可以向我解释一个更好的结构或为什么我应该保留房间的桌子?

mysql database schema
2个回答
0
投票

我认为您可能需要稍微改进一下您的域模型 - 如果不这样,很难说您的架构是否“正确”。

以Slack为模型(注意 - 我没有对此做过大量的研究,所以细节可能有误),你可能会说你的系统有“聊天”。

聊天可以是公开的 - 即列出供所有用户查看和加入 - 或私人 - 即不为所有用户列出,并且仅可通过邀请获得。

公开聊天必须具有“名称”属性。私人聊天可能有也可能没有名称属性。

聊天可以有2..n参与者。

默认情况下,所有1-1聊天都以私密方式开始。

可以将私人聊天更改为公共聊天。

在这种情况下,你有一个继承/专业化关系 - “私人”和“公共”是“聊天”的子类型。

关系模型在处理继承方面是出了名的坏事; SO上有很多related questions


0
投票

对于一个带有群组和私人聊天的简单聊天系统(两个成员),我会更喜欢这样做。

erm

另一个可能性是仅为组消息创建一个表,为私有聊天创建一个表。 (为了避免组和消息表之间的n:m,或者你使用n:m就像一个特性而不是一个有缺陷的bug /逻辑错误)。如果你想要一个更复杂的聊天系统,请看Neville Kuyt的帖子。

我希望我能帮到你。

© www.soinside.com 2019 - 2024. All rights reserved.