发送消息模块数据结构
涉及表
info 消息表
Doc 文档表
Info表
列名 数据类型 长度 允许空 说明
Id Int,标识 4 主键
From Int 4 发送者
To Varchar 1000 接受者
Body ntext 16 消息正文
Title nVarchar 200 消息标题
Isdel Varchar 1000 允许 是否删除
Isview Varchar 1000 允许 是否已阅
注:
1.to字段里存放的是所有接受者的id,用英文半角逗号分隔开。
2.isdel里存放所有删除了此条消息的用户id,用英文半角逗号隔开
3.isview里存放所有已经查阅了此条消息的用户id,用英文半角逗号隔开
info表的t-sql代码
if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[info]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [dbo].[info]
GOCREATE TABLE [dbo].[info] (
[id] [int] IDENTITY (1, 1) NOT NULL ,
[from] [int] NOT NULL ,
[to] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[body] [text] COLLATE Chinese_PRC_CI_AS NOT NULL ,
[title] [nvarchar] (200) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[isdel] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL ,
[isview] [varchar] (1000) COLLATE Chinese_PRC_CI_AS NULL 
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
相关存储过程
1.发送消息
/*
发送一条消息
*/
CREATE PROCEDURE [sp_insert_info]
( @from  [int],
 @to  [varchar](1000),
 @body  [text],
 @title  [nvarchar](200)
)AS INSERT INTO [oa].[dbo].[info] 
 ([from],
 [to],
 [body],
 [title],
 [isdel],
 [isview]

 
VALUES 
(  @from,
 @to,
 @body,
 @title,'',''
)
GO
示例:
exec sp_insert_info '1','2,3,4,5','哈哈,你是猪头','你是猪头'
2.查看一条消息
/*
用户删除一条消息
*/
CREATE PROCEDURE [sp_user_view_info]
( @id  [int],
  @isview  [varchar](1000)
)AS
update [info] set isview=isview+','+@isview where id=@id
select * from [info] where id=@id
GO
示例:exec sp_user_view_info 24,'2'
3.删除一条消息
/*
用户删除一条消息
*/
CREATE PROCEDURE [sp_user_del_info]
( @id  [int],
  @isdel  [varchar](1000)
)AS
update [info] set isdel=isdel+','+@isdel where id=@id
GO
示例:exec sp_user_del_info 24,'2'
4. 显示某个用户的消息
/*
显示某个用户的消息
*/
CREATE PROCEDURE [sp_my_info]
(
@myid [varchar](50)
)
as
select * from [info] where charindex(','+@myid+',',','+[to]+',')>0 and charindex(','+@myid+',',','+[isdel]+',')=0 order by id desc
GO
示例:exec sp_my_info '2'
5.是否有新的消息
/*
判断某人是否有新的消息
*/
CREATE PROCEDURE [sp_isnew_info]
(
@myid [varchar](50)
)
as
declare @a bit 
select @a=count(*) from [info] where charindex(','+@myid+',',','+[to]+',')>0 and charindex(','+@myid+',',','+[isdel]+',')=0 and charindex(','+@myid+',',','+[isview]+',')=0
if @a=0 
return 0
else
return 1GO
测试:
declare @a bit 
exec @a=sp_isnew_info 2
if @a=1
PRINT '你有新的消息'
else
PRINT '你暂时没有新消息'
这是以前设计的一个库结构

解决方案 »

  1.   

    1)消息的基本信息:Message
       MessageId 消息内码
       MessageTitle 消息标题
       MessageContent消息内容
       MessageDoc 消息相关文件URL
    (2)消息发送者信息表: Sender
       SendId 发送内码
       SendStfId 发送人员内码
       SendDate 发送日期
       SendState 发送状态
       MessageId 消息内码
       发送状态有:未发送成功标志为0,已经发送成功则标记为1,放置到垃圾箱则标记为2,
                   已经删除标记为3,放置到已发送箱记为4(3) 消息接收则信息表:Receiver
       ReceiveId 接受内码
       ReceiveStfId 接受人内码
       ReceiveState 接受状态
       MessageId  消息内码
    可以把前綴去掉。
    如在MessageID改ID我認為在Message裡的ID號就是Message的ID號不必要加Message
    我想這樣對以後的公用性要好一些。但是對於別的表裡的就是要去掉
    如在Receiver裡的MessageID就沒有必要去掉。我修改如下:
    1)消息的基本信息:Message
       Id 消息内码
       Title 消息标题
       Content消息内容
       Doc 消息相关文件URL
    (2)消息发送者信息表: Sender
       Id 发送内码
       StfId 发送人员内码
       Date 发送日期
       State 发送状态
       MessageId 消息内码
       发送状态有:未发送成功标志为0,已经发送成功则标记为1,放置到垃圾箱则标记为2,
                   已经删除标记为3,放置到已发送箱记为4(3) 消息接收则信息表:Receiver
       Id 接受内码
       StfId 接受人内码
       State 接受状态
       MessageId  消息内码
      

  2.   

    其它的数据流都比较简单了,直接用sql语句就可以了,主要有以下数据流可不可以做到公用 啊要不全部都用存儲過程要不全都直接用sql語句
      

  3.   

    我作的系统里面也有在线提示新消息这个东西,
    我的消息表是设置在一个表中,确实有考虑欠周全的地方,比如消息是发送给多人的,但是只要有一个人打开消息的状态就变成了已阅读,不过想想我们这个系统使用者极少而且一般都是对个人的就设计到一个表中了
    其他的我都是在asp中实现的而不是通过存储过程,原来的时候使用的数据库是access的