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