php - 消息系统流入数据库

标签 php mysql database-design message database-schema

简单或个人类型的消息传递:

我尝试遵循此处的其他答案,但无法理解它们是如何真正保存到数据库中的 enter image description here

发件人:
发送消息并在“已发送”消息

下保存/标记

接收者:
接收消息并标记为“收件箱”消息

我的问题: 当我尝试发送消息并将“占位符”字段更新为“已发送”时,接收者无法在“收件箱”中看到该消息,因为它是已设置为“已发送”。

顺便说一句占位符就像消息状态(收件箱、已发送、垃圾箱),我为我的连接表创建了 3 个以选项卡形式显示的自定义 View (收件箱、已发送和垃圾箱)

问题:

  1. 每次发送消息时都必须插入 2 条记录吗? (已发送和收件箱)
  2. 如果我只需要简单/个人消息,这是最好的数据库架构吗?

最佳答案

  1. 每次发送消息时都必须插入 2 条记录吗? (已发送和收件箱)

不,只有一次。

  • 如果我只需要简单/个人消息,这是最好的数据库架构吗?
  • 我建议保持简单。请注意,“Sent_two”显然应该是“sent_to”。这将完成您需要的一切,但占位符部分可能除外,我目前不明白您的意图。

    enter image description here

    -- MySQL Script generated by MySQL Workbench
    -- 11/30/14 09:07:59
    -- Model: New Model    Version: 1.0
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
    
    -- -----------------------------------------------------
    -- Schema mydb
    -- -----------------------------------------------------
    CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
    USE `mydb` ;
    
    -- -----------------------------------------------------
    -- Table `mydb`.`Users`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`Users` (
      `idUsers` INT NOT NULL,
      `firstname` VARCHAR(45) NULL,
      `lastname` VARCHAR(45) NULL,
      `username` VARCHAR(45) NULL,
      PRIMARY KEY (`idUsers`))
    ENGINE = InnoDB;
    
    
    -- -----------------------------------------------------
    -- Table `mydb`.`messages`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`messages` (
      `idmessages` INT NOT NULL,
      `Subject` VARCHAR(45) NULL,
      `Body` TEXT NULL,
      `Date` DATETIME NULL,
      `sent_from` INT NOT NULL,
      `sent_two` INT NOT NULL,
      PRIMARY KEY (`idmessages`),
      INDEX `fk_messages_Users_idx` (`sent_from` ASC),
      INDEX `fk_messages_Users1_idx` (`sent_two` ASC),
      CONSTRAINT `fk_messages_Users`
        FOREIGN KEY (`sent_from`)
        REFERENCES `mydb`.`Users` (`idUsers`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_messages_Users1`
        FOREIGN KEY (`sent_two`)
        REFERENCES `mydb`.`Users` (`idUsers`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    
    
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
    

    关于php - 消息系统流入数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27215643/

    相关文章:

    php explode mysql 几何线串类型

    php - 带有OR或AND或全文的表中的MySQL搜索关键字与[duplicate]匹配

    javascript - 根据 AngularJS 值重复图像

    mysql - 如何根据值更改一列或另一列?

    mysql - 为了拥有主键,我应该添加一个 autoinc 主键吗?

    php - Magento 订单状态更改事件

    java - 如何检查表中是否存在字符串?

    php - 大型比较 - MySQL 和 PHP

    c# - 如何在 IIS 网络服务器上使用 MVC.NET 存储用户上传的文件?

    mysql - 是否可以存储冗余数据以防外表记录被删除