假设有已经有一个用户信息表,其结构如下所示。
create table userinfo(
userid int(10),
username varchar(20),
);
请在这个基础上来设计一个简单的消息发布系统,来实现用户间消息的发送、阅读和消息阅读情况的统计。
1)请给出数据库设计方案,有效支持如下功能:
(a)用户A可以向用户B、C、D发布消息;
(b)每个用户可以查看自己需要阅读的消息;
(c)对于每条已经发送的消息,用户可以其被阅读情况,即已阅人数占需要阅读人数的比例;
2)给出sql,统计用户A已发布的每条消息的被阅读情况

解决方案 »

  1.   

    1)请给出数据库设计方案,有效支持如下功能:create table userconnect(id int,userid1 int,userid2 int,send int,read int)
    可以考虑用send和read分别表示发送和阅读,也可以只用一个字段,然后用不同的标记来做.
    例如:1--发送,2--阅读.
    create table userconnect(id int,userid1 int,userid2 int,type int)--信息表
    create table info(id int , info nvarchar(1000))(a)用户A可以向用户B、C、D发布消息;insert into userconnect values(1 , 1 , 2 , 1)
    insert into userconnect values(1 , 1 , 3 , 1)
    insert into userconnect values(1 , 1 , 4 , 1)(b)每个用户可以查看自己需要阅读的消息;
    select m.* from info m , userconnect n where m.id = n.id and n.userid2 = ... and n.type = 1(c)对于每条已经发送的消息,用户可以其被阅读情况,即已阅人数占需要阅读人数的比例;
    select 
    (select count(1) from userconnect where type = 2 and id = ...)*100.0/
    (select count(1) from userconnect where id = ...)
     
    2)给出sql,统计用户A已发布的每条消息的被阅读情况
    select m.* from userconnect m , userinfo n where m.userid1 = n.userid and n.username = 'A' order by m.type