【问题标题】:Advice on DB Table Structure for Message System消息系统数据库表结构的建议
【发布时间】:2015-06-18 13:53:13
【问题描述】:

我还没有在互联网上找到我正在寻找的教程。 我追求的功能是一个简单的消息发送和检索功能。

  1. 用户 1 - 向用户 2 发送消息
  2. 用户 2 可以查看收件箱中的邮件

我知道我需要 2 个控制器,一个用于处理消息发送,另一个用于检索。

这种类型的系统如何在数据库端运行。我是否为收件箱创建了一个新表,以便所有消息都以相应的发送者和接收者 ID 发送到那里?

【问题讨论】:

  • 这不是一个好的 StackOverflow 问题。一般来说,您应该已经尝试过一些事情,或者至少考虑过一些选择。想知道如何完成一项任务或什么是完成一项任务的最佳方式给定几个选项是完全不同的事情。任何试图回答您的问题的人都必须解释许多概念,而实际上您可能只需要在特定决定上的帮助。请将此作为建议,我没有否决您的问题,但我相信您下次可以提出更好的问题。 :)
  • 好吧,我想我可以先尝试一个理论,然后看看结果如何。我只是不知道构建它的最佳方式是什么。
  • 您具体遇到了什么问题?这是您需要的表吗?服务端如何实现?根据您对此的回答,我可以给您更多建议:)
  • 我的问题是表结构。如果轮询数据库是大型应用程序提供实时效果的有效方式。
  • 啊,所以你看到这个问题与 AngularJS 无关。您可以编辑问题(最重要的是标签)以寻求有关如何构建表格结构的建议,我也会尽力回答。

标签: mysql database-design


【解决方案1】:

一个简单的 2 个表就足够了:

TblUsers (UserId, UserName, Password, FirstName, LastName)

TblMessages (FromUser [fk to tblUsers], ToUser [fk to tblUsers], Title, Content, SentDate, ReadDate, DeletedDate)

请注意,DeletedDate 仅在您要为消息启用回收站时才相关。

如果您想向多个用户发送相同的消息,您需要稍微不同的架构:

TblMessags(MessageId, FromUser [fk to tblUsers], Title, Content, SentDate)

TblRecipients(MessageId [fk to messages], RecipientId [fk to users], ReadDate, DeletedDate)

【讨论】:

【解决方案2】:

由于您需要有关表结构而不是实现本身的帮助,因此可能会出现以下情况:

  1. 所有用户的表格
  2. 所有消息的表格

请记住,users 表和messages 表由您定义要存储在其中的属性。最初的方法可能是:

CREATE TABLE users(userID int, username VARCHAR(30));
CREATE TABLE messages(messageID int, senderID int, recipientID int, title VARCHAR(50), content VARCHAR(1000));

然后可以使用以下查询来获取特定用户的收件箱:

SELECT *
FROM messages
WHERE messages.recipientID=XXXX

XXXX 当然是你想要的用户收件箱的用户ID。这只会获取消息数据。如果您想显示发件人数据,您可以将上一个查询的结果与senderIDrecipientID 的查询结合起来。


可以根据您预期的查询类型更改表结构。我相信这应该足以作为初始方法,然后您可以分析是否需要对大量请求的数据进行分组或索引。

【讨论】:

    【解决方案3】:

    我是否为收件箱创建一个新表格,以便所有消息都以相应的发送者和接收者 ID 发送到那里?

    基本上是的。

    我意识到您想构建一个包含一个发送者和一个接收者的简单消息表。如果您想扩展消息系统,不妨为一个发送者和多个接收者设计表格。

    让我们制作用户表。

    User
    ----
    User ID
    User Name
    ...
    

    还有消息表。

    Message
    -------
    Message ID
    Message Sent Time Stamp
    Message Text
    

    用户可以发送多条消息并接收多条消息。所以,我们建立一个联结表。

    MessageUser
    -----------
    Message ID
    User ID
    Sender / Receiver Flag
    ...
    

    主键是(消息 ID,用户 ID)。您还将有一个关于(用户 ID、消息 ID)的唯一索引。主键允许您向用户发送消息。唯一索引允许您为用户构建以前的消息列表。

    【讨论】:

      猜你喜欢
      • 2013-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-26
      • 1970-01-01
      • 2012-12-03
      • 2015-01-28
      相关资源
      最近更新 更多