zoukankan      html  css  js  c++  java
  • web3gbula(布啦微博)数据库设计

    ylbtech-DatabaseDesgin:web-3g-bula(布啦微博)-数据库设计
     
    1.A,数据库关系图

     

    1.B,数据库设计脚本

     /App_Data/sql-basic.sql

    View Code
    -- =============================================
    -- ylb: 仿布啦微博
    -- url: http://bula.cn
    -- devloper:ylb,tech
    -- author: YuanBo
    -- date: 11:11 2011-07-05
    -- siteType:微博
    -- =============================================
    USE master
    GO
    
    -- Drop the database if it already exists
    IF  EXISTS (
        SELECT name 
            FROM sys.databases 
            WHERE name = N'BuLa'
    )
    DROP DATABASE BuLa
    GO
    
    CREATE DATABASE BuLa
    GO
    use BuLa
    
    go
    -- =============================================
    -- 1,用户表
    -- =============================================
    create table Users
    (
    UserID int identity(200,1) primary key,    --用户ID
    Username varchar(30) not null,                --昵称
    Userpass varchar(30) not null,                --密码
    Sex varchar(30) check(Sex='male' or Sex='female'),    --性别
    HeadImageUrl varchar(30) default('list_face.jpg'),            --头像Url
    
    Province varchar(30),            --省份
    City varchar(30),                ---市
    County varchar(30),                --
    Years int default(2011),        --
    Months int default(2),        --
    
    Days int default(15),        --
    Signature varchar(500)        --个性签名
    )
    
    go
    -- =============================================
    -- 2_1,关注表
    -- =============================================
    create table Attending
    (
    UserID int foreign key references Users(UserID),    --用户ID【FK】
    AttendingID int foreign key references Users(UserID)    --用户ID【FK】
    )
    
    go
    -- =============================================
    -- 2_2,被关注表
    -- =============================================
    create table Attended
    (
    AttendedID int foreign key references Users(UserID),    --用户ID【FK】
    UserID int foreign key references Users(UserID)        --用户ID【FK】
    )
    
    go
    -- =============================================
    -- 3,信息表
    -- =============================================
    create table Msg
    (
    MsgID int identity primary key,    --信息ID【PK】
    Content varchar(150),            --内容
    HeadImageUrl varchar(150),        --头像地址
    Username varchar(150),            --昵称
    Pubdate datetime default(getdate()),    --发布时间
    
    UserID int foreign key references Users(UserID),    --用户ID【FK】
    BaseID int default(0)        --信息ID(基类)0:基类,
    )
    
    go
    -- =============================================
    -- 4,私信息表
    -- =============================================
    create table SiMsg
    (
    MsgID int identity primary key,    --信息ID【PK】
    Content varchar(150),            --内容
    HeadImageUrl varchar(150),        --头像地址
    Username varchar(150),            --昵称
    Pubdate datetime default(getdate()),    --发布时间
    
    SendID int foreign key references Users(UserID),    --发送用户ID【FK】
    JieShouID int foreign key references Users(UserID)    --接收用户ID【FK】
    )
    
    go
    print '布啦微博数据创建成功!'
    1.C,功能实现代码

     /App_Data/select/1,Users.sql

    View Code
    use BuLa
    go
    -- =============================================
    -- ylb:1,对用户表的操作
    -- =============================================
    
    go
    --1,注册
    --select * from Users
    --select Username,Userpass,Sex,Province,City from Users
    --insert into Users(Username,Userpass,Sex,Province,City) values()
    select @@identity
    
    go
    --2,登录
    select count(*) from Users where UserID=2000 and Userpass='123'
    
    go
    --3,修改个人资料[先回填,后修改]
    select Username,Sex,City,Years,Months,Days,Signature from Users where UserID=2000
    Update Users set Username='tome' where UserID=20000
    
    go
    --4,修改头像
    update Users set HeadImageUrl='' where UserID=2000
    
    go
    --5,修改密码
    --a)bool=查原密码(方法:2,登录)
    --b)bool=ture:去修改;bool=false:原密码有误
    update Users set Userpass='abc' where UserID=20000
    
    
    go
    --6,获取个人信息
    
    select UserID,Username,Sex,HeadImageUrl,Years,Signature from Users where UserID=200
    
    
    go
    --7,查自定义
    select UserID,Username,HeadImageUrl from Users where UserID=200
    
    go
    --8,查RepliedBula个人信息
    select UserID,Username,Sex,HeadImageUrl,Province,Years from Users where UserID=200
    
    go
    --9,关注数量
    --9_1,我关注的人数
    select COUNT(*) from Attending where UserID=201
    --9_2,关注我的人数
    select COUNT(*) from Attended where UserID=201
    
    go
    --10,验证昵称是否存在
    select count(*) from Users where Username='sunshine'

     /App_Data/select/2,Attend.sql

    View Code
    use Bula
    go
    -- =============================================
    -- 2,对关注表和被关注表的操作
    -- =============================================
    select * from Users
    select * from Attending
    select * from Attended
    
    go
    --1,添加关注
    ----p:200用户关注了201用户
    --a)向关注表插入一条信息(我的视角)
    insert into Attending(UserID,AttendingID) values(200,201)
    --b)向被关注表插入一条信息(关注者的视角)
    insert into Attended(AttendedID,UserID) values(200,201)
    
    
    insert into Attending(UserID,AttendingID) values(200,202)
    --b)向被关注表插入一条信息(关注者的视角)
    insert into Attended(AttendedID,UserID) values(200,202)
    
    go
    --2,取消关注
    --a)关注表
    delete Attending where UserID=200 and AttendingID=201
    --b)被关注表
    delete Attended where AttendedID=200 and UserID=201
    
    
    
    go
    --3,我关注的人
    
    select UserID,Username,Sex,HeadImageUrl,Years,Signature,Province from Users 
    where UserID in(select AttendingID from Attending where UserID=200)
    
    
    go
    --4,关注我的人
    
    select UserID,Username,Sex,HeadImageUrl,Years,Signature,Province from Users 
    where UserID in(select AttendedID from Attended where userID=201)
    
    
    go
    --5,关注我的人的数量统计
    select COUNT(*) from Attended where UserID=201
    
    go
    --6,我和别人之间的关系
    select COUNT(*) from Attending where UserID=200 and AttendingID=201

     /App_Data/select/3,Msg.sql

    View Code
    use BuLa
    go
    -- =============================================
    -- 3,对信息表的操作方法
    -- =============================================
    
    select * from Msg
    go
    --1,发布一条信息
    select Content,HeadImageUrl,Username,UserID,BaseID from Msg
    --insert into Msg(Content,HeadImageUrl,Username,UserID,BaseID) values()
    
    go
    --2,查“我的布啦”
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID,BaseID from Msg where UserID=200
    order by MsgID desc
    
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID,BaseID from Msg where UserID=200 and BaseID=0
    order by MsgID desc
    
    
    go
    --3,查“布啦圈”
    select AttendingID from Attending where UserID=200
    
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID,BaseID from Msg 
    where UserID in(select AttendingID from Attending where UserID=200) or UserID=200 and BaseID=0
    order by MsgID desc
    
    go
    --4,获取一条信息,根据msgID
    select Content,Pubdate from Msg where MsgID=22
    
    go
    --5,获取所有回复,根据msgID
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID,BaseID from Msg where BaseID=2
    
    go
    --6,查询回复的数量
    select COUNT(*) from Msg where BaseID=2
    
    go
    --7,查看我的发布的布啦数量
    select COUNT(*) from Msg where UserID=200 and BaseID=0
    select * from Msg
    
    go
    --8,热门布啦(BulaSquare.aspx)【规则:当前布啦回复最多的布啦信息】
    --a)分析
     select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID from Msg
    
    --b)
    select BaseID,COUNT(*) from Msg
    where BaseID!=0
    group by BaseID
    --c)结论
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID,BaseID from Msg
    where MsgID in(select top 5 BaseID from Msg
    where BaseID!=0 and DateDiff(dd,pubdate,getdate())=0 
    group by BaseID)
    order by MsgID desc
    
    
    go
    --9,随便看看(public.aspx)
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID,BaseID from Msg where BaseID=0
    order by MsgID desc
    
    go
    --10,布啦回复(Personal/Replied.aspx)
    --a)我发布的布啦
    select * from Msg
    where UserID=200 and BaseID=0
    go
    --b)确定有回复的布啦
    select * from Msg
    where BaseID=1
    --c)结论
    select * from Msg 
    where BaseID in(select MsgID from Msg where UserID=200 and BaseID=0)
    
    
    --d)
    select * from Msg m1 inner join Msg m2
    on m1.BaseID=m2.MsgID
    where m1.BaseID!=0
    
    --f)总结论
    select * from Msg m1 inner join Msg m2
    on m1.BaseID=m2.MsgID
    where m1.BaseID!=0 and m2.UserID=200

     /App_Data/select/4,BulaSearching.sql

    View Code
    use BuLa
    go
    -- =============================================
    -- Bula搜索操作
    -- =============================================
    
    go
    -- 1,Bula搜索:
    -- 类型:搜话题、搜昵称、搜布啦号
    -- 1_1,搜话题
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID,BaseID from Msg where Content like '%你们%'
    order by MsgID desc
    
    go
    -- 1_2,搜昵称
    select * from Users where Username like '%x%'
    
    go
    -- 1_3,搜布啦号
    select * from Users where UserID like '%2%'

     /App_Data/select/5,Ranking.sql

    View Code
    use BuLa
    go
    -- =============================================
    -- 5,排行榜
    -- =============================================
    
    go
    -- 1,布啦数量排行榜
    -- 1_分析过程
    --a,
    select UserID,Username,HeadImageUrl,Signature from Users
    
    --b,
    select top 20 UserID,COUNT(*) from Msg
    where BaseID=0
    group by UserID
    order by COUNT(*) desc
    
    go
    --c,结果
    select UserID,Username,HeadImageUrl,Signature from Users
    where UserID in
    (select top 20 UserID from Msg
    where BaseID=0
    group by UserID
    order by COUNT(*) desc
    )
    
    
    go
    --2,被关注排行榜
    select * from Attended
    --a,分析
    select UserID,COUNT(*) from Attended
    group by UserID
    order by COUNT(*) desc
    
    --b,结果
    select top 20 UserID,Username,HeadImageUrl,Signature from Users
    where UserID in
    (select top 20 UserID from Attended
    group by UserID
    order by COUNT(*) desc
    )
    
    go
    --3,被回复数排行榜
    --a,分析
    select UserID,COUNT(*) from Msg
    where BaseID!=0
    group by UserID
    order by COUNT(*) desc
    --b,结果
    select top 20 UserID,Username,HeadImageUrl,Signature from Users
    where UserID in
    (select top 20 UserID from Msg
    where BaseID!=0
    group by UserID
    order by COUNT(*) desc)

    ,6

     /App_Data/select/6,BulaKe.sql

    View Code
    use BuLa
    go
    -- =============================================
    -- ylb:Bulake对布啦客推荐
    -- =============================================
    
    go
    --1,热门布啦客推荐
    --随机方式推荐10位用户
    select top 10 UserID,Username,HeadImageUrl,Province from Users order by NEWID()
    
    
    go
    --2,热门布啦客推荐(Reg2.aspx)
    select top 12 UserID,Username,Sex,HeadImageUrl,Signature from Users order by NEWID()
    
    
    go
    --3,热门布啦客推荐(BulaSquare.aspx)--附加字段content
    
    select top 6 u.UserID,u.Username,u.HeadImageUrl,m.MsgID,m.Content from Users u 
    inner join Msg m 
    on u.UserID=m.UserID
    where m.BaseID=0
    order by m.MsgID desc
    go

     /App_Data/select/7,Reconmendation.sql

    View Code
    use BuLa
    go
    -- =============================================
    -- ylb:recomendation操作
    -- =============================================
    go
    --一、热门回复
    --1,今日回复最多的
    --分析
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID from Msg 
    
    --a,查今天的布啦
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID from Msg
     where DateDiff(dd,pubdate,getdate())=0 
     
    --b,查布啦每条布啦回帖的数量,并按降序排列
    select COUNT(*),BaseID from Msg 
    where BaseID!=0 and DateDiff(dd,pubdate,getdate())=0 
    group by BaseID
    order by COUNT(*) desc
    
    
    --结果
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID from Msg
    where DateDiff(dd,pubdate,getdate())=0  and MsgID in(
    select top 10 BaseID from Msg 
    where BaseID!=0 and DateDiff(dd,pubdate,getdate())=0 
    group by BaseID
    order by COUNT(*) desc)
    
    
    
    go
    --2,一周回复最多的
    select MsgID,Content,HeadImageUrl,Username,Pubdate,UserID from Msg
    where DateDiff(WEEK,pubdate,getdate())=0  and MsgID in(
    select top 10 BaseID from Msg 
    where BaseID!=0 and DateDiff(WEEK,pubdate,getdate())=0 
    group by BaseID
    order by COUNT(*) desc)

     /App_Data/select/8,SiMsg.sql

    View Code
    use BuLa
    go
    -- =============================================
    -- 4,对私信表的操作
    -- =============================================
    
    go
    --1,发私信
    insert into SiMsg(Content,HeadImageUrl,Username,SendID,JieShouID) values('ylb给晓梅发的私信','tt','sunshine',200,201)
    
    --select MsgID,Content,HeadImageUrl,Username,Pubdate,SendID,JieShouID from SiMsg
    --
    go
    --2,收到私信
    select MsgID,Content,HeadImageUrl,Username,Pubdate,SendID,JieShouID from SiMsg 
    where JieShouID=201
    go
    
    
    --3,发的私信
    select MsgID,Content,u.HeadImageUrl,u.Username,Pubdate,JieShouID,SendID from SiMsg sm
    inner join Users u on sm.JieShouID=u.UserID
    where SendID=200
    go
    --4,我的关注(我给关注好友发的私信)
    select MsgID,Content,u.HeadImageUrl,u.Username,Pubdate,SendID,JieShouID from SiMsg sm
    inner join Users u on sm.SendID=u.UserID
    where SendID=200 and JieShouID in(select AttendingID from Attending where UserID=200)
    
    go
    --5,删除私信,根据MsgID
    delete SiMsg where MsgID=1
    warn 作者:ylbtech
    出处:http://ylbtech.cnblogs.com/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
  • 相关阅读:
    下载安装安卓开发工具
    斐波那契数列
    各位相加
    求连续最大子序列和
    反转字符串中的单词
    统计位数为偶数的数字
    Express框架的整体感知
    node.js当中的http模块与url模块的简单介绍
    formidable处理提交的表单或文件的简单介绍
    30分钟,学会经典小游戏编程!
  • 原文地址:https://www.cnblogs.com/ylbtech/p/2916642.html
Copyright © 2011-2022 走看看