2014-11-30 2 views
0

Простой или Личные сообщения:система сообщений поступает в базу данных

Я пытался следовать другие ответы здесь, но не могу понять, как они действительно сохраняются в базе данных enter image description here

Отправитель:
Отправляет сообщение и сохраняет/тег под «Отправлено» сообщение

Приемник:
получает сообщение и бирку «Входящие» сообщение

Моя проблема:Когда я попытался отправить сообщение и обновить мое поле «Заполнитель» в «Отправленные», приемник coudn't видеть это в его «Входящие», потому что он уже установлен на «Отправлено».

кстати Заполнитель, как статус сообщений (Входящие, Отправленные, Trash), я создал 3 пользовательских представлений, отображаемых в закладке формы для моих соединяемых таблиц (Входящие, Отправленные и Корзина)

Вопрос :

  1. Должен ли я вставлять 2 записи каждый раз при отправке сообщения? (Отправлено и Входящие)
  2. Является ли это лучшей схемой базы данных для отслеживания, если мне нужно простое/личное сообщение?
+0

Будут ли они быть посланы только и отправлены пользователям в базе данных? – user1032531

+0

@ user1032531 yes .. – Raf

+0

И может ли каждое сообщение отправляться только одному пользователю? – user1032531

ответ

1
  1. Должен ли я вставлять 2 записи каждый раз при отправке сообщения? (Отправленные и входящие)

Нет, только один раз.

  1. Является ли это лучшей схемой базы данных для отслеживания, если мне нужно простое/личное сообщение?

Я бы порекомендовал хранить его очень просто. Обратите внимание, что «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 @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@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 [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 
+0

Ну, я люблю простоту базы данных, но не отвечает, как обрабатываются «Входящие», «Отправленные» и «Корзина». Очевидно, есть только 1 сообщение для отправки (подумайте о сообщении электронной почты). Как я смогу создать дисплей, отображающий отправленное сообщение в разделе «Отправлено»? то Получатель получает сообщение в его «Входящие»? Это одна из причин, по которой я добавляю местозаполнитель (точно так же, как состояние сообщения) для «Входящие», «Отправленные» и «Корзина» .. но я понимаю, что вы сказали ... становится сложным .. – Raf

+0

@ Raf Как для мусора, просто добавьте два столбца tinyint к сообщениям: один для sender_trash и один для receiver_trash. Чтобы найти сообщения, отправленные пользователем 123, просто запросите таблицу сообщений, где send_from - 123, и это не мусор отправителя. Точно так же можно было бы сделать то же самое для пользователей, входящих в папку «Входящие», «Отправленные» и «Входящие». Или я чего-то не хватает? – user1032531

+0

Спасибо, я получил вашу точку сейчас. Значит, мне не нужно какое-либо поле, например «заполнитель», чтобы классифицировать сообщение? Его просто вопрос запроса и отображение их в разделе «Отправлено» или «Входящие», просто используя ярлыки? я прав? – Raf

Смежные вопросы