【问题标题】:Design DB for chats between users为用户之间的聊天设计数据库
【发布时间】:2023-03-24 05:28:01
【问题描述】:

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

关系:

事件 - 用户 - 多对多。

组 - 用户 - 多对多。

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

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

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

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

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

【问题讨论】:

    标签: laravel database-design


    【解决方案1】:

    我相信Chat 与Group 和Event 具有多态关联(也许还有User)。此处提供了该问题的一些解决方案: https://www.slideshare.net/billkarwin/practical-object-oriented-models-in-sql/29-Polymorphic_Assocations_Solutions_Exclusive_arcs

    这样的东西可以吗?

    聊天用户

    • 身份证
    • user_id
    • chat_id

    聊天(独家弧线法)

    • 身份证
    • event_id(可为空)
    • group_id(可为空)
    • 描述/等

    聊天消息

    • 身份证
    • chat_id
    • user_id_from
    • user_id_to(可为空)
    • 日期
    • 留言

    假设:

    • 事件/组可以包含多个聊天
    • 用户可以加入群组但不能加入群聊

    此外,Laravel 自带了一个原生的多态关系处理解决方案。它也可以放在这里。

    【讨论】:

      【解决方案2】:

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

      event_user

      • 身份证
      • event_id
      • user_id

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

      group_user

      • 身份证
      • group_id
      • user_id

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

      聊天

      • 身份证
      • 姓名
      • chatable_id
      • chatable_type

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

      消息

      • 身份证
      • chat_id
      • 留言
      • created_at

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

      对话

      • 身份证
      • sender_id
      • receiver_id
      • 留言

      所有的sender_id 和receiver_id 都是外键,在users 表中引用一些id

      【讨论】:

        猜你喜欢
        • 2014-10-01
        • 1970-01-01
        • 2017-09-19
        • 2017-10-23
        • 2016-04-21
        • 2015-03-06
        • 1970-01-01
        • 2018-01-16
        • 2011-11-04
        相关资源
        最近更新 更多