谈站内信的数据库设计

看到一个关于站内信设计的文章:http://www.cnblogs.com/grenet/archive/2010/03/08/1680655.html
受些启发,刚好自己也需要这样一个功能,就分享一下我的设计。
需要注意的点:
1、站内信可以是点对点发,也可以是群发,但发件人永远只有一个。
2、发件人不需要知道信是否已读
3、删除的时候,如果发件人把信删了,收件人的信不能丢失

综合分析,设计表如下:
message_sender 发件人信息表
mid from_uid from_username title content from_deleted date

mid:信息ID,自增
from_uid from_usernam:发件人的ID和用户名
title content:信息标题和内容
from_deleted:发件人是否删除

message_receiver 收件人信息表
rid mid to_uid to_username is_readed is_deleted

rid:id 自增
mid:信息ID,与message_sender表中MID对应
to_uid to_username:收件人信息
is_readed is_deleted:收件人是否已读是否删除

使用:
查发件箱:只需要查message_sender表
查收件箱:需要同时查两个表
群发邮件:message_sender表只需要插入一条数据,message_receive表重复插入。
删除邮件:只需要修改状态值

对于删除邮件,可能时间长了,会有一些收、发件人都删除的无用邮件存在。可以定期运行一断脚本来清理无效邮件,或者直接在删除的时候判断是否双方都删除了邮件,这样对群发实现相对复杂点。

当然,如果网站想记录所有的邮件往来,即使用户删除了,管理员还想看到,那只改一下状态就好了。

建表SQL

CREATE TABLE `message_sender` (
`mid` int(11) NOT NULL auto_increment,
`from_uid` int(11) NOT NULL COMMENT '发信人',
`from_username` varchar(32) NOT NULL,
`title` varchar(200) NOT NULL COMMENT '信息标题',
`content` text NOT NULL COMMENT '信息内容',
`from_deleted` tinyint(4) NOT NULL,
`date` int(10) NOT NULL COMMENT '发送日期',
PRIMARY KEY (`mid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='用户站内信' AUTO_INCREMENT=4 ;

CREATE TABLE `ar_message_receiver` (
`rid` int(11) NOT NULL auto_increment,
`mid` int(11) NOT NULL,
`to_uid` int(11) NOT NULL,
`to_username` varchar(32) NOT NULL,
`is_readed` tinyint(4) NOT NULL,
`is_deleted` tinyint(4) NOT NULL,
PRIMARY KEY (`rid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值