消息传递系统流入数据库

时间:2014-11-30 16:49:24

标签: php mysql database-design message database-schema

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

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

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

下发送消息并保存/标记

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

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

btw 占位符就像邮件状态(收件箱,已发送,已删除邮件),我创建了3个自定义视图,以Tab形式显示给我的已连接表格(收件箱,已发送和已删除邮件)

问题:

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

1 个答案:

答案 0 :(得分:2)

  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;