设计DB用于用户之间的聊天

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

我为我的应用程序设计数据库结构有一个问题。我有3个模型:事件,组和用户。

关系:

活动 - 用户 - 多对多。

群组 - 用户 - 多对多。

组内可以进行一次聊天,一次内部活动。此外,在不久的将来,我将实现两个或更多用户之间的聊天。

我有点困惑,设计它的最佳方式是什么。我创建了聊天模型以及聊天和用户之间的多对多关系。

第一个想法:组和事件聊天的成员将分别存储在event_users和group_users表中。只有用户之间的聊天才会存储在chat_users中。

第二个想法:chat_users将与event_users和group_users表同步。这种方式的优点是我将有简单的分离逻辑来管理聊天,并且对DB没有太多复杂的查询。

感谢您提供反馈或其他想法。

laravel database-design
2个回答
1
投票

我相信ChatGroupEvent(也许还有User)有多态关系。这里提供了一些解决问题的方法:https://www.slideshare.net/billkarwin/practical-object-oriented-models-in-sql/29-Polymorphic_Assocations_Solutions_Exclusive_arcs

这样的事可以吗?

ChatUser

  • ID
  • 用户身份
  • chat_id

聊天(独家弧形方法)

  • ID
  • event_id(可空)
  • group_id(可空)
  • 描述/等

ChatMessage

  • ID
  • chat_id
  • user_id_from
  • user_id_to(可空)
  • 日期
  • 信息

做出的假设:

  • 事件/组可以包含多个聊天
  • 用户可以属于某个组,但不能进行群聊

此外,Laravel还提供了原生多态关系处理解决方案。它也适合这里。


0
投票

用户可以参加活动,活动可以有很多参与该活动的用户,在这种特殊情况下我们需要使用多对多关系Laravel One to Many Relation

event_user

  • ID
  • EVENT_ID
  • 用户身份

用户可以是许多组的成员,一个组可以成为很多成员,在这种情况下我们需要一对多关系Laravel Many to Many Relation

GROUP_USER

  • ID
  • GROUP_ID
  • 用户身份

聊天可以与事件或组相关,因此我们保存聊天的类型可以是事件或组以及该事件或组的相应ID。因此,如果我们进行了特定的聊天,我们可以通过相应的事件来检索与该聊天相关的所有用户,或者根据每种情况下的chatable_type对其进行分组,以了解更多信息,请参阅Laravel Many To Many Polymorphic Relations

  • ID
  • 那么
  • Ctble_id
  • Ctble_taip

我们还需要一个表来保存特定聊天的所有会话

消息

  • ID
  • chat_id
  • 信息
  • created_at

并且对于用户聊天,您可以创建一个单独的表,可以特定地保存有关该聊天的相关信息

对话

  • ID
  • SENDER_ID
  • receiver_id
  • 信息

所有sender_id和receiver_id都将是外键引用用户表上的一些id

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