设计用于用户之间聊天的数据库

时间:2018-09-18 11:12:37

标签: laravel database-design

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

关系:

事件-用户-多对多。

组-用户-多对多。

将有一个聊天组和一个内部事件。另外在不久的将来,我将实现两个或更多用户之间的聊天。

我有点困惑什么是最好的设计方法。我创建了聊天模型,并建立了聊天和用户之间的多对多关系。

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

第二个想法:chat_users将与event_users和group_users表同步。这种方式的优点是,我将使用简单的分离逻辑来管理聊天,并且对数据库的查询不会很多。

感谢任何反馈或其他想法。

2 个答案:

答案 0 :(得分:1)

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

这样的东西行得通吗?

ChatUser

  • id
  • user_id
  • chat_id

聊天(专有弧方法)

  • id
  • event_id(可为空)
  • group_id(可为空)
  • 说明/等

ChatMessage

  • id
  • chat_id
  • user_id_from
  • user_id_to(可为空)
  • 日期
  • 消息

所做的假设:

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

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

答案 1 :(得分:0)

用户可以参加某个事件,并且一个事件可以有许多用户参加该事件,在这种情况下,我们需要使用“多对多”关系Laravel One to Many Relation

event_user

  • id
  • event_id
  • user_id

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

group_user

  • id
  • group_id
  • user_id

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

聊天

  • id
  • 名称
  • chatable_id
  • chatable_type

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

消息

  • id
  • chat_id
  • 消息
  • created_at

对于用户聊天,您可以创建一个单独的表,可以专门保存有关该聊天的相关信息

对话

  • id
  • sender_id
  • receiver_id
  • 消息

所有sender_id和receive_id将是外键,并在用户表上引用一些ID

相关问题