我为我的应用程序设计数据库结构有一个问题。我有3个模型:事件,组和用户。
关系:
活动 - 用户 - 多对多。
群组 - 用户 - 多对多。
组内可以进行一次聊天,一次内部活动。此外,在不久的将来,我将实现两个或更多用户之间的聊天。
我有点困惑,设计它的最佳方式是什么。我创建了聊天模型以及聊天和用户之间的多对多关系。
第一个想法:组和事件聊天的成员将分别存储在event_users和group_users表中。只有用户之间的聊天才会存储在chat_users中。
第二个想法:chat_users将与event_users和group_users表同步。这种方式的优点是我将有简单的分离逻辑来管理聊天,并且对DB没有太多复杂的查询。
感谢您提供反馈或其他想法。
我相信Chat
与Group
和Event
(也许还有User
)有多态关系。这里提供了一些解决问题的方法:https://www.slideshare.net/billkarwin/practical-object-oriented-models-in-sql/29-Polymorphic_Assocations_Solutions_Exclusive_arcs
这样的事可以吗?
ChatUser
聊天(独家弧形方法)
ChatMessage
做出的假设:
此外,Laravel还提供了原生多态关系处理解决方案。它也适合这里。
用户可以参加活动,活动可以有很多参与该活动的用户,在这种特殊情况下我们需要使用多对多关系Laravel One to Many Relation
event_user
用户可以是许多组的成员,一个组可以成为很多成员,在这种情况下我们需要一对多关系Laravel Many to Many Relation
GROUP_USER
聊天可以与事件或组相关,因此我们保存聊天的类型可以是事件或组以及该事件或组的相应ID。因此,如果我们进行了特定的聊天,我们可以通过相应的事件来检索与该聊天相关的所有用户,或者根据每种情况下的chatable_type对其进行分组,以了解更多信息,请参阅Laravel Many To Many Polymorphic Relations
猫
我们还需要一个表来保存特定聊天的所有会话
消息
并且对于用户聊天,您可以创建一个单独的表,可以特定地保存有关该聊天的相关信息
对话
所有sender_id和receiver_id都将是外键引用用户表上的一些id