我需要在网站上实现消息传递系统。有用户,这些用户可以发送消息给彼此。我怎样才能做到这一点?我需要什么样的数据库结构?如何在用户之间实现消息传递系统?
我现在要做的是这样的:
CREATE TABLE `message` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`SenderId` int(11) NOT NULL,
`ReceiverId` int(11) NOT NULL,
`MessageContent` varchar(2000) COLLATE utf8_turkish_ci NOT NULL,
`MessageDate` datetime NOT NULL,
`Viewed` bit(1) NOT NULL DEFAULT b'0',
PRIMARY KEY (`Id`),
KEY `FK_Message_User_idx` (`SenderId`),
KEY `FK_Message_Receiver_idx` (`ReceiverId`),
CONSTRAINT `FK_Message_Sender` FOREIGN KEY (`SenderId`) REFERENCES `user` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT `FK_Message_Receiver` FOREIGN KEY (`ReceiverId`) REFERENCES `user` (`Id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB AUTO_INCREMENT=3
这是MySQL的创建表的脚本。基本上,我存储senderid,receiverid和消息。问题是,如果接收者将删除他的消息,消息也将从发送者消失。我想实现一个像电子邮件框这样的结构。你有什么建议?
P.S.我正在用ASP.NET MVC 3和C#开发项目。
也许你需要创建邮件的两个副本,一个发件人和一个接收人。你有什么尝试? – 2013-03-22 13:28:40
@DanPuzey,不,我没有试过你的建议,但是我想过了。现在我正在考虑一个很好的解决方案。 – hakan 2013-03-22 13:34:22
如果它始终是1个发件人和1个接收者,那么您只需拥有两个标志,即是否从任一邮箱中删除了邮件。这样可以避免在系统中出现重复的消息。如果你有多个接收器,但这不起作用,你将不得不复制该消息。 – VARAK 2013-03-22 14:39:01