Database “创建消息传递”;系统“;在数据库中(尤其是MySQL)

Database “创建消息传递”;系统“;在数据库中(尤其是MySQL),database,mysql,Database,Mysql,我在MySQL中成功创建了一个表: CREATE TABLE IF NOT EXISTS MESSAGE ( MESSAGE_ID BIGINT NOT NULL AUTO_INCREMENT ,AUTHOR_ID VARCHAR(30) NOT NULL ,TITLE VARCHAR(100) NOT NULL ,MESSAGE VARCHAR(4095) NOT N

我在MySQL中成功创建了一个表:

CREATE TABLE IF NOT EXISTS MESSAGE
(
    MESSAGE_ID          BIGINT NOT NULL AUTO_INCREMENT      
    ,AUTHOR_ID          VARCHAR(30) NOT NULL
    ,TITLE              VARCHAR(100) NOT NULL
    ,MESSAGE            VARCHAR(4095) NOT NULL
    ,UNREAD_FLAG            BOOLEAN NOT NULL DEFAULT TRUE                   
    ,CREATION_DATE          TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    ,DATE_LAST_MODIFIED     TIMESTAMP NULL

    ,PRIMARY KEY (MESSAGE_ID)
    ,FOREIGN KEY (AUTHOR_ID) REFERENCES USER (USR_ID)
);
如您所见,由于一个或多个收件人可以接收同一封邮件,因此没有对谁接收邮件的引用

  • 我如何实现消息线程“模型”,以便如果有一条消息发送给多个用户,收件人可以回复该消息并跟踪收件人回复的消息?例如,我向5位朋友发送了一条关于一个聚会的消息,他们都会回复,我如何在回复消息链接上保留原始消息的记录?此外,收件人还可以对响应的消息进行响应,从而创建对响应消息的响应,因此最终,它将是响应消息的树状结构

  • 如何创建一个表,使多个收件人接收相同的邮件?我有一个想法,用recipient_id(对用户表的引用)和message_id(message id)对创建一个表。效率高吗?我问的原因是,如果有200人收到相同的消息,那么将有200个用户id、消息id对表

  • 另外,我已经实现了第2条),所以我想这不会是一个问题

  • 我不明白你的问题

  • 你的想法是做这件事的正常方式。您需要设置一个带有recipient_id和message_id的表,并对其运行查询以确定(例如)特定用户有哪些消息。根据应用程序的需要,您可能还需要在此表中存储其他数据,如用户是否已阅读消息等


  • 对于第二个问题,我已经做到了……谢谢……我更担心问题1。请注意,我已重新更新了问题。我只需在消息表中添加另一列来跟踪响应\u to\u id,它将是返回消息\u id的外键,但可以为null。如果有人响应消息#123,则他们的新消息的response_to_id设置为123。您可以通过这种方式跟踪响应到响应的链接,等等。好的,允许使用空外键吗?这会使我的表正常化吗?有空值应该没有问题。我一直在MySQL数据库中这样做。不过,我不知道标准化是什么;DB理论不是我的专长。