关于消息系统的DB表结构的建议

时间:2015-06-18 13:53:13

标签: mysql database-design

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

  1. 用户1 - 向用户2发送消息
  2. 用户2可以在其收件箱中查看邮件
  3. 我知道我需要2个控制器,一个用于处理消息发送,另一个用于检索。

    这种类型的系统如何在数据库端运行。我是否为收件箱创建了一个新表,因此所有邮件都在那里发送,并带有相应的发件人和收件人ID?

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

由于您需要表结构的帮助而不需要实现本身,因此可能存在以下情况:

  1. 所有用户的表格
  2. 所有消息的表格
  3. 请记住,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的查询结合起来。

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

答案 2 :(得分:0)

  

我是否为收件箱创建了一个新表格,因此所有邮件都会以相应的发件人和收件人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)。主键允许您向用户发送消息。唯一索引允许您为用户构建以前的消息列表。