收发信息数据库以及操作

/*
建表和建存储过程
*/


-- 用户表
CREATE   TABLE   [ t_User ]
(
[ userID ]   INT   IDENTITY ( 1 , 1 ), -- 自动增长
[ userAccount ]   VARCHAR ( 15 ), -- 用户账号,主键
[ userPassword ]   CHAR ( 32 ), -- 用户密码,最好经过加密,比如流行的MD5
[ userName ]   NVARCHAR ( 5 ) -- 用户真实姓名
--
  ..其他信息
PRIMARY   KEY ( [ userID ] ),
UNIQUE ( [ userAccount ] )
ON   [ PRIMARY ]
-- 消息表
CREATE   TABLE   [ t_Message ]
(
[ messageID ]   BIGINT   IDENTITY ( 1 , 1 ), -- 编号,主键,自动增长
[ messagePostUserID ]   INT , -- 发消息人,外键关联t_User表的UserID
[ messageReceiveUserID ]   INT , -- 收消息人,外键关联t_User表的UserID
[ messageTitle ]   NVARCHAR ( 25 ), -- 消息标题
[ messageBody ]   NTEXT , -- 消息主体,该字段类型视消息主体内容大小而定,如果特别大,则设为NTEXT,否则用NVARCHAR即可
[ messageTime ]   DATETIME   DEFAULT   GETDATE (), -- 发消息时间,默认值为当前系统的时间
[ isRead ]   BIT   DEFAULT   0 , -- 收消息人是否阅读过
[ isPostUserDelete ]   BIT   DEFAULT   0 , -- 发消息人是否删除
[ isReceiveUserDelete ]   BIT   DEFAULT   0 -- 收消息人是否删除
PRIMARY   KEY ( [ messageID ] ),
FOREIGN   KEY ( [ messagePostUserID ] REFERENCES   [ t_User ] ( [ userID ] ),
FOREIGN   KEY ( [ messageReceiveUserID ] REFERENCES   [ t_User ] ( [ userID ] )
ON   [ PRIMARY ]
-- 附件表
CREATE   TABLE   [ t_Message_Attachment ]
(
[ attachmentID ]   BIGINT   IDENTITY ( 1 , 1 ), -- 编号,主键,自动增长
[ messageID ]   BIGINT , -- 外键,关联消息表中的messageID
[ AttachFile ]   BINARY -- 附件(需转换为二进制)
FOREIGN   KEY ( [ messageID ] REFERENCES   [ t_Message ] ( [ messageID ] ON   DELETE   CASCADE
ON   [ PRIMARY ]
GO

-- 用户查看自己所发消息列表的存储过程
CREATE   PROCEDURE  usp_ViewMessageListByPostUser
(
@userAccount   VARCHAR ( 15 ) -- 用户账号
)
AS
BEGIN
SELECT   [ m ] . [ messageID ] , [ m ] . [ messageTitle ] , [ m ] . [ messageTime ] , [ m ] . [ isRead ] , [ m ] . [ messagePostUserID ] , [ u2 ] . [ userName ]
FROM   [ t_Message ]   [ m ]   JOIN   [ t_User ]   [ u ]   ON   [ m ] . [ messagePostUserID ] = [ u ] . [ userID ]
LEFT   JOIN   [ t_User ]   [ u2 ]   ON   [ m ] . [ messageReceiveUserID ] = [ u2 ] . [ userID ]
WHERE   [ u ] . [ userAccount ] = @userAccount   AND   [ m ] . [ isPostUserDelete ] = 0
END
GO
-- 用户查看自己所收消息列表的存储过程
CREATE   PROCEDURE  usp_ViewMessageListByReceiveUser
(
@userAccount   VARCHAR ( 15 ) -- 用户账号
)
AS
BEGIN
SELECT   [ m ] . [ messageID ] , [ m ] . [ messageTitle ] , [ m ] . [ messageTime ] , [ m ] . [ isRead ] , [ m ] . [ messagePostUserID ] , [ u2 ] . [ userName ]
FROM   [ t_Message ]   [ m ]   JOIN   [ t_User ]   [ u ]   ON   [ m ] . [ messageReceiveUserID ] = [ u ] . [ userID ]
LEFT   JOIN   [ t_User ]   [ u2 ]   ON   [ m ] . [ messagePostUserID ] = [ u2 ] . [ userID ]
WHERE   [ u ] . [ userAccount ] = @userAccount   AND   [ m ] . [ isReceiveUserDelete ] = 0
END
GO
-- 查看消息具体内容(不包括附件)存储过程
CREATE   PROCEDURE  usp_ViewMessageDetail
(
@messageID   BIGINT , -- 消息编号
@isReceiveUser   BIT = 0 -- 是否收件人阅读
)
AS
BEGIN
SET  XACT_ABORT  ON
BEGIN   TRAN -- 采用事务操作
IF   @isReceiveUser = 1   AND   EXISTS ( SELECT   1   FROM   [ t_Message ]   WHERE   [ messageID ] = @messageID   AND   [ isRead ] = 0 )
   
BEGIN
       
UPDATE   [ t_Message ]   SET  isRead = 1   WHERE   [ messageID ] = @messageID   AND   [ isRead ] = 0
   
END
SELECT   [ m ] . * , [ u ] . [ userName ]   FROM   [ t_Message ]   [ m ]
LEFT   JOIN   [ t_User ]   [ u ]   ON   CASE   @isReceiveUser   WHEN   0   THEN   [ m ] . [ messagePostUserID ]   ELSE   [ m ] . [ messageReceiveUserID ]   END = [ u ] . [ userID ]
WHERE   [ m ] . [ messageID ] = @messageID
COMMIT   TRAN
SET  XACT_ABORT  OFF
END
GO
-- 查看消息附件
CREATE   PROCEDURE  usp_ViewMessageAttachment
(
@messageID   BIGINT -- 消息编号
)
AS
BEGIN
SELECT   *   FROM   [ t_Message_Attachment ]   WHERE   [ messageID ] = @messageID   ORDER   BY  attachmentID  ASC
END
GO

/*
使用操作
*/

-- 插入用户A和B
INSERT   INTO   [ t_User ] ( [ userAccount ] , [ userPassword ] , [ userName ] )
SELECT   ' A ' , ' E10ADC3949BA59ABBE56E057F20F883E ' , ' 张三 '   UNION   ALL
SELECT   ' B ' , ' E10ADC3949BA59ABBE56E057F20F883E ' , ' 李四 '   UNION   ALL
SELECT   ' C ' , ' E10ADC3949BA59ABBE56E057F20F883E ' , ' 王五 '

-- 插入条消息
INSERT   INTO   [ t_Message ] ( [ messagePostUserID ] , [ messageReceiveUserID ] , [ messageTitle ] , [ messageBody ] )
VALUES ( 1 , 2 , ' 你好 ' , ' 好久不见,近来可好 ' ) -- A给B发消息
INSERT   INTO   [ t_Message ] ( [ messagePostUserID ] , [ messageReceiveUserID ] , [ messageTitle ] , [ messageBody ] )
VALUES ( 2 , 1 , ' Re:你好 ' , ' 是啊,好久不见,凑合活呗 ' ) -- B回消息给A
INSERT   INTO   [ t_Message ] ( [ messagePostUserID ] , [ messageReceiveUserID ] , [ messageTitle ] , [ messageBody ] )
VALUES ( 1 , 2 , ' 再次发送 ' , ' 好久不见,看来小日子挺滋润的哦 ' ) -- A又发了一条给B
INSERT   INTO   [ t_Message ] ( [ messagePostUserID ] , [ messageReceiveUserID ] , [ messageTitle ] , [ messageBody ] )
VALUES ( 3 , 2 , ' 老兄你好 ' , ' 我是王五啊 ' ) -- C给B发了一条
INSERT   INTO   [ t_Message ] ( [ messagePostUserID ] , [ messageReceiveUserID ] , [ messageTitle ] , [ messageBody ] )
VALUES ( 1 , 3 , ' 我是张三 ' , ' 你是王五吗?我是张三啊 ' ) -- A给C发了一条


-- A用户查询自己发消息列表
EXEC  usp_ViewMessageListByPostUser  ' A '
-- B用户查询自己收到消息列表
EXEC  usp_ViewMessageListByReceiveUser  ' B '
-- A用户查询编号为1的消息以及附件
EXEC  usp_ViewMessageDetail  1 , 0
EXEC  usp_ViewMessageAttachment  1
-- b用户查询编号为1的消息以及附件
EXEC  usp_ViewMessageDetail  1 , 1
EXEC  usp_ViewMessageAttachment  1


-- A用户再次查询自己发消息列表
EXEC  usp_ViewMessageListByPostUser  ' A '


/*
结束操作,删除表和存储过程
*/

DROP   PROCEDURE   [ usp_ViewMessageListByPostUser ]
DROP   PROCEDURE   [ usp_ViewMessageListByReceiveUser ]
DROP   PROCEDURE   [ usp_ViewMessageDetail ]
DROP   PROCEDURE   [ usp_ViewMessageAttachment ]
DROP   TABLE   [ t_Message_Attachment ]
DROP   TABLE   [ t_Message ]
DROP   TABLE   [ t_User ]
GO
/*
messageID            messageTitle              messageTime                                            isRead messagePostUserID userName 
-------------------- ------------------------- ------------------------------------------------------ ------ ----------------- -------- 
1                    你好                        2008-02-29 10:31:07.560                                0      1                 李四
3                    再次发送                      2008-02-29 10:31:07.560                                0      1                 李四
5                    我是张三                      2008-02-29 10:31:07.560                                0      1                 王五

(所影响的行数为 3 行)

messageID            messageTitle              messageTime                                            isRead messagePostUserID userName 
-------------------- ------------------------- ------------------------------------------------------ ------ ----------------- -------- 
1                    你好                        2008-02-29 10:31:07.560                                0      1                 张三
3                    再次发送                      2008-02-29 10:31:07.560                                0      1                 张三
4                    老兄你好                      2008-02-29 10:31:07.560                                0      3                 王五

(所影响的行数为 3 行)

messageID            messagePostUserID messageReceiveUserID messageTitle              messageBody                                                                                                                                                                                                                                                      messageTime                                            isRead isPostUserDelete isReceiveUserDelete userName 
-------------------- ----------------- -------------------- ------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------ ------ ---------------- ------------------- -------- 
1                    1                 2                    你好                        好久不见,近来可好                                                                                                                                                                                                                                                        2008-02-29 10:31:07.560                                0      0                0                   张三

(所影响的行数为 1 行)

attachmentID         messageID            AttachFile 
-------------------- -------------------- ---------- 

(所影响的行数为 0 行)


(所影响的行数为 1 行)

messageID            messagePostUserID messageReceiveUserID messageTitle              messageBody                                                                                                                                                                                                                                                      messageTime                                            isRead isPostUserDelete isReceiveUserDelete userName 
-------------------- ----------------- -------------------- ------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ------------------------------------------------------ ------ ---------------- ------------------- -------- 
1                    1                 2                    你好                        好久不见,近来可好                                                                                                                                                                                                                                                        2008-02-29 10:31:07.560                                1      0                0                   李四

(所影响的行数为 1 行)

attachmentID         messageID            AttachFile 
-------------------- -------------------- ---------- 

(所影响的行数为 0 行)

messageID            messageTitle              messageTime                                            isRead messagePostUserID userName 
-------------------- ------------------------- ------------------------------------------------------ ------ ----------------- -------- 
1                    你好                        2008-02-29 10:31:07.560                                1      1                 李四
3                    再次发送                      2008-02-29 10:31:07.560                                0      1                 李四
5                    我是张三                      2008-02-29 10:31:07.560                                0      1                 王五
*/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值