功能描述:
        功能主要包括两部分
        A部分 可以实现用户间Message的收发;
        B部分 可以让系统向所有用户发信息(这个操作有可能是经常进行的).

功能实现
        A部分 功能数据库设计比较简单

        B部分 .我想主要有两种方法去实现:
            一是一个用户增加一条记录,这样实现很方便,如果在用户不是很多的情况下可以考虑,但是如果用户很多的话,缺点就显示出来了,太浪费数据库资源,不太现实.
            还有一种方法就是把收Message的用户Sender_User_ID 和 Receiver_User_ID设置成0,表示是系统的信息,可是这样的问题是怎么区分一个用户有没有 读这个消息.可以解决的方法是增加一张表MessageIsRead,如果用户已经读则添加一条记录,select数据查一下MessageIsRead,如果已经有记录了就表示已经读了~ 
            具体实现过程
表结构
 1类似bbs的message功能的数据库设计if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[MessageIsRead]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
 2类似bbs的message功能的数据库设计drop table [dbo].[MessageIsRead]
 3类似bbs的message功能的数据库设计GO
 4类似bbs的message功能的数据库设计
 5类似bbs的message功能的数据库设计if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[Message]'and OBJECTPROPERTY(id, N'IsUserTable'= 1)
 6类似bbs的message功能的数据库设计drop table [dbo].[Message]
 7类似bbs的message功能的数据库设计GO
 8类似bbs的message功能的数据库设计
 9类似bbs的message功能的数据库设计CREATE TABLE [dbo].[MessageIsRead] (
10类似bbs的message功能的数据库设计    [User_ID] [bigint] NOT NULL ,
11类似bbs的message功能的数据库设计    [Message_ID] [bigint] NOT NULL 
12类似bbs的message功能的数据库设计ON [PRIMARY]
13类似bbs的message功能的数据库设计GO
14类似bbs的message功能的数据库设计
15类似bbs的message功能的数据库设计CREATE TABLE [dbo].[Message] (
16类似bbs的message功能的数据库设计    [Message_ID] [bigint] IDENTITY (11NOT NULL ,
17类似bbs的message功能的数据库设计    [Message_Title] [nvarchar] (50) COLLATE Chinese_PRC_CI_AS NOT NULL ,
18类似bbs的message功能的数据库设计    [Message_Content] [nvarchar] (4000) COLLATE Chinese_PRC_CI_AS NOT NULL ,
19类似bbs的message功能的数据库设计    [Receiver_User_Id] [bigint] NOT NULL ,
20类似bbs的message功能的数据库设计    [Sender_User_ID] [bigint] NOT NULL ,
21类似bbs的message功能的数据库设计    [Send_Time] [datetime] NOT NULL ,
22类似bbs的message功能的数据库设计    [Is_Read] [bigint] NOT NULL 
23类似bbs的message功能的数据库设计ON [PRIMARY]
24类似bbs的message功能的数据库设计GO
25类似bbs的message功能的数据库设计
26类似bbs的message功能的数据库设计

存储过程
 1类似bbs的message功能的数据库设计--检查同名的SP是不是已经存在,若存在则删除.
 2类似bbs的message功能的数据库设计IF EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[usp_Message_Select]'AND type='P')
 3类似bbs的message功能的数据库设计DROP PROCEDURE [dbo].[usp_Message_Select]
 4类似bbs的message功能的数据库设计GO
 5类似bbs的message功能的数据库设计
 6类似bbs的message功能的数据库设计--创建SP
 7类似bbs的message功能的数据库设计CREATE PROCEDURE [dbo].[usp_Message_Select]
 8类似bbs的message功能的数据库设计(
 9类似bbs的message功能的数据库设计    @User_ID bigint
10类似bbs的message功能的数据库设计)
11类似bbs的message功能的数据库设计AS
12类似bbs的message功能的数据库设计SELECT * FROM
13类似bbs的message功能的数据库设计(
14类似bbs的message功能的数据库设计
15类似bbs的message功能的数据库设计--以下为普通的用户间对发的Message
16类似bbs的message功能的数据库设计    SELECT
17类似bbs的message功能的数据库设计        Message_ID,
18类似bbs的message功能的数据库设计        Message_Title,
19类似bbs的message功能的数据库设计        Message_Content,
20类似bbs的message功能的数据库设计        Is_Read
21类似bbs的message功能的数据库设计    FROM
22类似bbs的message功能的数据库设计        Message
23类似bbs的message功能的数据库设计    WHERE
24类似bbs的message功能的数据库设计        Receiver_User_ID = @User_ID
25类似bbs的message功能的数据库设计    
26类似bbs的message功能的数据库设计    UNION    
27类似bbs的message功能的数据库设计
28类似bbs的message功能的数据库设计--以下为系统Message
29类似bbs的message功能的数据库设计    SELECT
30类似bbs的message功能的数据库设计        Message.Message_ID,
31类似bbs的message功能的数据库设计        Message_Title,
32类似bbs的message功能的数据库设计        Message_Content,
33类似bbs的message功能的数据库设计        CASE ISNULL(MessageIsRead.[User_ID],0WHEN 0 THEN 0 ELSE 1 END AS Is_Read  --如果用户没有阅读,MessageIsRead.[User_ID]为 null
34类似bbs的message功能的数据库设计    FROM
35类似bbs的message功能的数据库设计        Message
36类似bbs的message功能的数据库设计    Left JOIN
37类似bbs的message功能的数据库设计        MessageIsRead
38类似bbs的message功能的数据库设计    ON
39类似bbs的message功能的数据库设计        MessageIsRead.[User_ID] = @User_ID
40类似bbs的message功能的数据库设计    AND
41类似bbs的message功能的数据库设计        MessageIsRead.[Message_ID] = Message.Message_ID
42类似bbs的message功能的数据库设计    WHERE
43类似bbs的message功能的数据库设计        Sender_User_ID = 0  
44类似bbs的message功能的数据库设计    AND
45类似bbs的message功能的数据库设计        Receiver_User_ID = 0     --Sender_User_ID = 0 and Receiver_User_ID = 0 表示是系统信息
46类似bbs的message功能的数据库设计
47类似bbs的message功能的数据库设计    ) a
48类似bbs的message功能的数据库设计GO
49类似bbs的message功能的数据库设计

其他说明:
      这样的设计已经破坏了数据的完整性,因为Sender_User_ID和Receiver_User_ID 为0时,User_ID = 0的数据在用户表中并不存在,如果要解决这个问题可以把系统向用户发的数据单独放在另外一张新的表格里.
      在这里还是没有从根本上解决数据的完整性问题,比如当用户向系统管理员发Message和管理员向用户发Message时Sender_User_ID,Receiver_User_ID怎么填?因为系统管理员在用户表里是不存在的,所以没有真正的User_ID.如果您知道这个问题请您在回复里告诉我,谢谢. 

相关文章:

  • 2021-10-24
  • 2022-12-23
  • 2021-09-23
  • 2022-12-23
  • 2021-11-18
  • 2021-11-21
  • 2022-12-23
猜你喜欢
  • 2022-01-01
  • 2022-01-01
  • 2022-01-01
  • 2021-11-05
  • 2022-01-01
  • 2021-11-22
相关资源
相似解决方案