php – 用于私人消息传递的单个mysql表

我正在尝试在网站上创建一个用于私人消息传递的表.我创建了下表,我认为这是有效的,但我真的很感激一些反馈.

CREATE TABLE IF NOT EXISTS `pm` (
  `id` int(11) NOT NULL AUTO_INCREMENT,`user_id` int(11) NOT NULL,`to` int(11) NOT NULL,`date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,`subject` varchar(255) DEFAULT NULL,`message` text NOT NULL,`read` tinyint(1) NOT NULL DEFAULT '0',`deleted` tinyint(1) NOT NULL DEFAULT '0',PRIMARY KEY (`id`)
  FOREIGN KEY (user_id) REFERENCES User(user_id)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;

我有2列确定消息的状态:读取和删除

如果读取= 1,则接收器已读取该消息.如果删除= 1,则发件人或收件人从已发送或已收到的收件箱中删除邮件.如果删除= 2,则两个用户都删除了该消息,因此从数据库表中删除该行.

最佳答案
一些评论:

Charset = latin1会让一些人感到厌烦,我建议使用charset = utf8.

我建议不仅在user_id上进行外键检查,而且还要检查.

此外,我还会在日期上添加索引,因为您将在该字段上进行大量排序.

您需要在两个字段中拆分已删除,否则您将不知道哪个用户已删除该邮件. (deleted_by_user,deleted_by_recipient)

请注意,date是一个保留字,您需要在查询中将其更改为message_date或`backtick`.

相关文章

在正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信...
> [合辑地址:MySQL全面瓦解](https://www.cnblogs.c...
物理服务机的CPU、内存、存储设备、连接数等资源有限,某个时...
1 回顾 上一节我们详细讲解了如何对数据库进行分区操作,包括...
navicat查看某个表的所有字段的详细信息 navicat设计表只能一...
文章浏览阅读4.3k次。转载请把头部出处链接和尾部二维码一起...