谈站内信的数据库设计

转自http://baiyuxiong.iteye.com/blog/876211


看到一个关于站内信设计的文章: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 
Sql代码   收藏代码
  1. CREATE TABLE `message_sender` (  
  2.   `mid` int(11) NOT NULL auto_increment,  
  3.   `from_uid` int(11) NOT NULL COMMENT '发信人',  
  4.   `from_username` varchar(32) NOT NULL,  
  5.   `title` varchar(200) NOT NULL COMMENT '信息标题',  
  6.   `content` text NOT NULL COMMENT '信息内容',  
  7.   `from_deleted` tinyint(4) NOT NULL,  
  8.   `dateint(10) NOT NULL COMMENT '发送日期',  
  9.   PRIMARY KEY  (`mid`)  
  10. ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COMMENT='用户站内信' AUTO_INCREMENT=4 ;  
  11.   
  12. CREATE TABLE `ar_message_receiver` (  
  13.   `rid` int(11) NOT NULL auto_increment,  
  14.   `mid` int(11) NOT NULL,  
  15.   `to_uid` int(11) NOT NULL,  
  16.   `to_username` varchar(32) NOT NULL,  
  17.   `is_readed` tinyint(4) NOT NULL,  
  18.   `is_deleted` tinyint(4) NOT NULL,  
  19.   PRIMARY KEY  (`rid`)  
  20. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值