BBS论坛数据库设计
BBS论坛系统数据库设计
BBS论坛系统数据库设计0.后台用户管理(TAB_USER)序号字段名称字段英文名数据类型长度PK(Y/N) NULL(Y/N) 备注1 自增ID id int Y N2 用户帐号usercode varchar 20 N 登录用3 姓名username varchar 20 N3 密码pwd varchar 11 N 用MD5加密算法4 性别ssex varchar 105 角色role int6 Email地址email varchar 301.前台用户注册表(TAB_USER_REGISTER)序号字段名称字段英文名数据类型长度PK(Y/N) NULL(Y/N) 备注1 自增ID id int Y N2 用户帐号usercode varchar 50 N 登录用3 姓名username varchar 50 N3 密码userpsw varchar 11 N 用MD5加密算法4 昵称nickname varchar 505 头像image6 Email地址email varchar 807 验证码checkno bigint 102.用户发帖表(TAB_USER_SENDCARD)序号字段名称字段英文名数据类型长度PK(Y/N) NULL(Y/N) 备注1 发帖ID sendcardid int Y N 自增2 发帖区ID sendzoneid int 参照发帖区3 用户帐号usercode varchar 304 主题title varchar 200 N5 发帖内容cardcontent varchar 10006 日期date date7 验证码checkno bigint发帖ID的值来判断级别。
3.用户跟帖表(TAB_USER_FOLLOWCARD)序号字段名称字段英文名数据类型长度PK(Y/N) NULL(Y/N) 备注1 跟帖ID followcardid int Y N 自增2 讨论区ID discussid int 参照推荐讨论区ID和技术讨论区ID3 用户帐号usercode varchar 304 发帖ID sendcardid int 参照发帖表sendcardID(1:n)5 跟帖内容followcardcontent varchar 10006 日期date date7 验证码checkno4.公告管理表(TAB_NOTICEMANAGE )序号字段名称字段英文名数据类型长度PK(Y/N) NULL(Y/N) 备注1 公告ID noticeid int Y N 自增2 公告时间noticetime date3 公告内容content varchar 200 N4 作者author varchar 505 备注remark varchar 1005.推荐讨论区表(TAB_RECOMMANDMANAGE)长度PK(Y/N) NULL(Y/N) 备注序号字段名称字段英文名数据类型1 自增ID id int Y N 自增2 推荐讨论区号ID recommandid int Y N3 推荐主题号recomcontentid int4 推荐主题content varch100 Nardate5 推荐主题时间recommandInftime506 作者author varchar7 备注remark varch100ar6.技术交流区表(TAB_TECHENIQUEMANAGE )序号字段名称字段英文名数据类型长度PK(Y/N) NULL(Y/N) 备注1 自增ID id int Y N 自增techeniqueid int Y N2 技术讨论区号ID2 发稿时间techeniqueInftime datecontent varchar 100 N3 技术交流主题4 作者author varchar 505 备注remark varchar 1007.文章阅读区表(TAB_ARTICLEMANAGE)序号字段名称字段英文名数据类型长度PK(Y/N) NULL(Y/N) 备注1 文章ID articleid int Y N 自增2 文章主题articletitle varchar 2003 文章内容articlecontent varchar 1000 N4 作者author varchar 505 备注remark varchar 1008.发帖主题审核表(TAB_SENDAUDITING)序号字段名称字段英文名数据类型长度PK(Y/N) NULL(Y/N) 备注1 自增ID articleid int Y N 自增2 发帖ID sendcardid int 203 审批状态auditingstatus varchar 20 N 通过审批/取消4 排序状态compositor varchar 10 置顶/一般通过审批用1表示,取消用0表示。
BBS论坛数据库设计代码
BBS论坛数据库设计代码use mastergo----------------------------------------新建数据bbsDB的库---------------------------------------------------------判断数据库是否存在使用exists关键字,在用sysdatabases关键字查询--if exists(select * from sysdatabases where name = 'bbsDB')--如果数据库存在就删除此数据库用drop(删除)database(数据库对象)bbsDB (数据库名)--drop database bbsDB--删除后在添加一个数据库create(添加)database(数据库对象)bbsDB(数据库名)on--create database bbsDBon(name = 'bbsDB_MDF', --数据库主文件名--filename = 'F:\SQL\第四阶段\bbsDB_MDF.mdf', --数据库存储的路径--size = 10mb, --数据库初使大小--filegrowth = 10% --增长变化--)--设置日志文件--log on(name = 'bbsDB_LDF', --日志文件名--filename = 'F:\SQL\第四阶段\bbsDB_LDF.ldf', --日志文件存储路径--size = 1mb, --日志文件初使大小--maxsize = 20mb, --日志文件最大的可储存--filegrowth = 10% --增长变化--)go---------------------------------------以上信息为新建的数据库-------------------------------------------------use bbsDBgo---------------------------------------新建bbsUsers表(用户表)---------------------------------------------------判断bbsDB库是否有表bbsUser的存在exists关键字+sysobjects判断当前数据库表--if exists(select * from sysobjects where name='bbsUsers')--如果表存在就删除此表--drop table bbsUser--新建bbsUser表--create table bbsUsers(UID int identity(1,1) not null, --用户编号,自动增长列,不允许空--Uname varchar(50) not null, --用户名,不允许空--Upassword varchar(50) not null, --密码,不允许空--Uemail varchar(50), --邮箱--Usex char(2) not null, --性别,不允许空--Uclass int, --用户等级--Uremark varchar(50), --备注信息--UregDate datetime not null, --注册日期,不允许空--Ustate int, --状态,是否在线等--Upoint int, --用户的积分--)go--------------------------------------为用户表添加各种约束----------------------------------------------------------为bbsUser表添加约束,add constraint关键字PK_UID约束名,primary key (主键)设置UID字段为主键--alter table bbsUsersadd constraint PK_UID primary key(UID)--为Upassword添加约束,check(Upassword length>=6)字段长度大于等于6位,default设置默认值为888888--alter table bbsUsersadd constraint CK_Upassword check(len(Upassword) >= 6)alter table bbsUsersadd constraint DF_Upassword default('888888') for Upassword--为Uemail字段添加约束,必须包含@号--alter table bbsUsersadd constraint CK_Uemail check(Uemail like '%@%')--为User字段添加约束,设置默认值为男,并且值只能是男或女--alter table bbsUsersadd constraint DF_Usex default('男') for Usexalter table bbsUsersadd constraint CK_Usex check(Usex='男' or Usex='女')--为Uclass字段添加约束,默认值为1--alter table bbsUsersadd constraint DF_Uclass default(1) for Uclass--为UregDate字段添加约束,默认值为当前日期--alter table bbsUsersadd constraint DF_UregDate default(getDate()) for UregDate--为Ustate添加约束,默认值为0--alter table bbsUsersadd constraint DF_Ustate default(0) for Ustate--为Upoint字段添加约束,默认值为20--alter table bbsUsersadd constraint DF_Upoint default(20) for Upoint-----------------------------------以上信息为以建立的bbsUser(用户表)及各种约束-----------------------------------go-----------------------------------新建bbsSection表(版块表)-------------------------------------------------------判断数据库内是否有表bbsSection的存在--if exists(select * from sysobjects where name = 'bbsSection')--如果有此表执行删除--drop table bbsSection--新建bbsSection表,及个字段--create table bbsSection(SID int identity(1,1) not null, --版块编号,自动增长列--Sname varchar(50) not null, --版块名称,不允许空--SmasterID int not null, --版主ID--Sprofile varchar(50), --版面简介--SclickCount int, --点击率--StopicCount int --发贴数--)-----------------------------------为表bbsSection(版块表)添加约束-----------------------------------------------go--将SID字段设置为主键--alter table bbsSectionadd constraint PK_SID primary key(SID)--为SmasterID设置外键,他的主键是bbsUsers表的UID字段foreign key(外键) references 主键表(主键表字段)--alter table bbsSectionadd constraint FK_SmasterID foreign key(SmasterID) references bbsUsers (UID)--为SclickCount字段添加默认值为0--alter table bbsSectionadd constraint DF_SclickCount default(0) for SclickCount--为字段StopicCount设置默认值为0--alter table bbsSectionadd constraint DF_StopicCount default(0) for StopicCount---------------------------------以上为表bbsSection(版块表)建立及添加相应约束-----------------------------------------------------------------------------新建bbsTopic表(主贴表)---------------------------------------------------go--判断数据库中是否有bbsTopic表的存在--if exists(select * from sysobjects where name = 'bbsTopic')--删除此表--drop table bbsTopic--新建bbaTopic表及个字段--create table bbsTopic(TID int identity(1,1) not null, --帖子编号--TsID int not null, --版块编号--TuID int not null, --发贴人ID--TreplyCount int, --回复数量--Tface int, --发贴表情--Ttopic varchar(50) not null, --标题--Tcontents varchar(50) not null, --正文--Ttime datetime, --发贴时间--TclickCount int, --点击数--Tstate int not null, --状态--TlastReply datetime --最后回复时间--)----------------------------------------为bbsTopic(主贴表)表个字段添加约束-----------------------------------------go--将TID字段设置为主键--alter table bbsTopicadd constraint PK_TID primary key(TID)--将TsID设置为外键,引用bbsSection表的主键SID字段--alter table bbsTopicadd constraint FK_TsID foreign key(TsID) references bbsSection (SID) --将TuID字段设置为外键盘,引用bbsUsers表的主键UID字段-- alter table bbsTopicadd constraint FK_TuID foreign key(TuID) references bbsUsers (UID) --设置TreplyCount字段的默认值为0--alter table bbsTopicadd constraint DF_TreplyCount default(0) for TreplyCount--为Tcontents字段添加约束,他的值必须大于等于6位--alter table bbsTopicadd constraint CK_Tcontents check(len(Tcontents) >= 6)--为Ttime字段添加默认值,为当前日期--alter table bbsTopicadd constraint DF_Ttime default(getDate()) for Ttime--设置TclickCount字段默认值为0--alter table bbsTopicadd constraint DF_TclickCount default(0) for TclickCount--设置Tstate字段默认值为1--alter table bbsTopicadd constraint DF_Tstate default(1) for Tstate--为TlastReply字段添加约束,最后回复时间必须要晚于发贴时间--alter table bbsTopicadd constraint CK_TlastReply check(TlastReply > Ttime)-----------------------------------------以上为bbsTopic(主贴表)表建立及建立个字段------------------------------------------------------------------------------新建表bbsReply(回帖表)及个字段--------------------------------------go--判断数据库中是否有bbsReply(回帖表)的存在--if exists(select * from sysobjects where name = 'bbsReply')--删除bbsReply表--drop table bbsReply--创建bbsReply(回帖)表及个字段--create table bbsReply(RID int identity(1,1) not null, --帖子编号--RtID int not null, --主贴ID--RsID int not null, --版块ID--RuID int not null, --回帖人ID--Rface int, --回帖表情--Rcontents varchar(50) not null, --正文--Rtime datetime, --回帖时间--RclickCount int --点击数--)-----------------------------------------为bbsReply(回帖)表个字段添加约束----------------------------------------go--设置RID字段为主键--alter table bbsReplyadd constraint PK_RID primary key(RID)--设置RtID字段为外键引用bbsTopic表的主键TID字段--alter table bbsReplyadd constraint FK_RtID foreign key(RtID) references bbsTopic(TID)--设置RsID为外键引用bbsSection表的主键SID--alter table bbsReplyadd constraint FK_RsID foreign key(RsID) references bbsSection(SID)--设置RuID为外键引用bbsUsers表的主键UID字段--alter table bbsReplyadd constraint FK_RuID foreign key(RuID) references bbsUsers(UID)--设置Rcontents字段必须大于6位--alter table bbsReplyadd constraint DF_Rcontents check(len(Rcontents) >= 6)--设置Rtime字段默认值为当前日期--alter table bbsReplyadd constraint DF_Rtime default(getDate()) for Rtime------------------------------------------------以上为创建bbsReply(回帖)表的内容---------------------------------------------------------------------------------------向表格中插入数据-----------------------------------------go--向bbsUsers(用户表插入数据)--insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,Ustate,Upoint) values('天天','123456','zhong@','女',2,'我们的家乡在希望的田野上',3,100)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,Ustate,Upoint) values('可卡因','HYXS007','ss@','女',1,'我要去公安局自首',1,200) insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,Ustate,Upoint) values('心酸果冻','888888','yy@','男',2,'牵匹瘦马闯天涯',2,600)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,Ustate,Upoint) values('冬篱儿','fangdong','bb@','女',3,'爱迷失在天堂',4,1200) insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,Ustate,Upoint) values('Supper','master','dd@','女',5,'BBS大斑竹',1,500)--向bbsSection(版块表插入数据)--insert into bbsSection(Sname,SmasterID,Sprofile,SclickCount,StopicCount) values('Java技术核心',3,'包含框架,开源',500,1)insert into bbsSection(Sname,SmasterID,Sprofile,SclickCount,StopicCount) values('.Net技术',5,'包含C#,ASP',800,1)insert into bbsSection(Sname,SmasterID,Sprofile,SclickCount,StopicCount) values('Linux/Unix社区',5,'包含系统维护运行',0,0)--向bbsTopic(主贴表)插入数据--insert intobbsTopic(TsID,TuID,TreplyCount,Tface,Ttopic,Tcontents,TclickCount,Tstate,T lastReply)values(1,3,3,1,'还是JAVA','JAVA文件如何读取',200,1,'2008-8-1')insert intobbsTopic(TsID,TuID,TreplyCount,Tface,Ttopic,Tcontents,TclickCount,Tstate,T lastReply)values(2,2,1,2,'.NET文件部署','项目包含、WINFROM',0,1,'2007-8-5')--向bbsReply(跟贴表)插入数据--insert into bbsReply(RtID,RsID,RuID,Rface,Rcontents,RclickCount)values(1,1,5,2,'JAVA中乱码问题怎么解决好?',100)insert into bbsReply(RtID,RsID,RuID,Rface,Rcontents,RclickCount)values(1,1,4,4,'你好你好我们我们',200)insert into bbsReply(RtID,RsID,RuID,Rface,Rcontents,RclickCount)values(1,1,4,4,'呵呵哈哈嘿嘿西西',200)insert into bbsReply(RtID,RsID,RuID,Rface,Rcontents,RclickCount)values(2,1,4,4,'JSP文件转换',200)insert into bbsReply(RtID,RsID,RuID,Rface,Rcontents,RclickCount)values(2,1,4,4,'啊大安定大安定',200)---------------------------------------------------以上为各表格插入测试数据------------------------------------------------------------------------------------------------查询数据库情况-------------------------------------------print 'SQL Server的版本是:'+@@versionprint 'SQL Server的服务器名称是:'+@@servername--------------------------------------------------------------------------------------------------------------------------------------------------------------------系统变量查询上一条语句错误--------------------------------------update bbsUsers set Upassword = '1234' where Uname = '天天'print '执行上条语句产生错误: '+convert(varchar(5),@@error) --输出上一条语句的错误信息----------------------------------------------------------------------------------------------------------------------------------------------------------------------查询用户天天的信息---------------------------------------------set nocount on --不打印影响的信息----查询个人信息--print '天天个人信息如下'select Uname,Uremark,Upoint from bbsUsers where Uname = '天天'--用变量存储ID查询信息--declare @id int --声明变量--select @id = UID from bbsUsers where Uname = '天天' --将bbsUsers表中的UID字段赋值给id变量--print '发贴情况如下'selectconvert(varchar(10),Ttime,111),TclickCount,Ttopic,Tcontents,TclickCount,Tco ntents from bbsTopic where TuID = @idprint '回贴情况如下'select convert(varchar(10),Rtime,111),RclickCount,Rcontents from bbsReplywhere RuID = @idif(@id > 30) --if判断--print '有权发贴' --条件为真输出--else --否则--print '无权发贴' --输出-----------------------------------------------------------------------------------------------------------------------------------------------------------查询心酸果冻用户发贴回帖显示级别---------------------------------------------声明变量用于存储用户ID--declare @uNameID int--声明变量用于存储用户发贴数量--declare @count int--声明变量用于存储用户回帖数量--declare @count1 int--将心酸果冻用户的ID号存到变量@uNameID中--select @uNameID = UID from bbsUsers where Uname = '心酸果冻'--用count统计函数将用户的发贴数量存到变量@count中--select @count = count(*) from bbsTopic where TuID = @uNameID--输出--print '心酸果冻发贴数量为:' + convert(varchar(10),@count)print ''print '具体内容如下:'--显示信息,判断用户发贴数量大于0时显示帖子的信息--if(@count > 0)select Ttime as 发贴时间,TclickCount as 点击率,Ttopic as 主题,Tcontents as 内容from bbsTopic where TuID = @uNameID--用count统计函数将用户的回贴数量存到变量@count1中--select @count1 = count(*) from bbsReply where RuID = @uNameID--输出--print '心酸果冻的回帖数量为: '+convert(varchar(10),@count1)--显示信息,用户回帖数量大于0时显示帖子信息--if(@count1 > 0)select Rtime as 回帖时间,RclickCount as 点击数量,Rcontents as 回帖内容from bbsReply where RuID = @uNameID--判断用户的等级--if((@count + @count1) < 10)print '心酸果冻贴数总计为: '+convert(varchar(10),@count + @count1)+' 功臣级别为: 新手上路'if(((@count + @count1) >= 10) and ((@count + @count1) < 20))print '心酸果冻贴数总计为: '+convert(varchar(10),@count + @count1)+' 功臣级别为: 侠客'if(((@count + @count1) >= 20) and ((@count + @count1) < 30))print '心酸果冻贴数总计为: '+convert(varchar(10),@count + @count1)+' 功臣级别为: 骑士'if(((@count + @count1) >= 30) and ((@count + @count1) < 40))print '心酸果冻贴数总计为: '+convert(varchar(10),@count + @count1)+' 功臣级别为: 精灵王'if(((@count + @count1) >= 40) and ((@count + @count1) < 50))print '心酸果冻贴数总计为: '+convert(varchar(10),@count + @count1)+' 功臣级别为: 光明使者'if((@count + @count1) >= 50)print '心酸果冻贴数总计为: '+convert(varchar(10),@count + @count1)+' 功臣级别为: 法老'----------------------------------------------------------------------------------------------------------------------------------------------------------回帖最多的为精华贴-----------------------------------------------------------声明整形变量用于存储主贴编号,和作者编号--declare @tidid intdeclare @zhuzheid intdeclare @huifu int--将主贴标号存到@tidid变量中--select top 1 @tidid = TID from bbsTopic order by TreplyCount desc--将用户编号存到@zhuzheid变量中--select @zhuzheid = TuID from bbsTopic where TID = @tidid--输出--print '第一精华贴的信息如下:'--查出回贴最多的主贴,(用户表与主贴表两表连查)--select Ttime as 发贴时间,TclickCount as 点击率,Uname as 作者,Ttopic as 主题,Tcontents as 内容from bbsTopicinner join bbsUserson bbsUsers.UID = bbsTopic.TuIDwhere bbsUsers.UID = @zhuzheid and bbsTopic.TID = @tidid--为了美观输出空行--print ''--利用@tidid(主贴编号)变量查出回复数量存到@huifu变量中--select @huifu = TreplyCount from bbsTopic where TID = @tidid--输出--print '回帖数量'+convert(varchar(10),@huifu)+',如下所示:'--查询回帖信息--select Rtime as 回帖时间,RclickCount as 点击率,回帖表情= case--case多分之语句判断回帖表情--when Rface = 1 then '~(00)~猪头'when Rface = 2 then '*:0)小丑'when Rface = 3 then '[:|]机器人'when Rface = 4 then '{~0~0~}老人家'when Rface = 5 then '(:<)吹水大王'end,Rcontents as 回帖内容from bbsReply where RtID = @tidid-----------------------------------------------------------------------------------------------------------------/*实现:1、论坛人气,点击率>1000为“人气熊旺旺”,否则为“一般般”2、年度品牌版块:主贴量最多的版块3、年度倒胃版块:主贴量最少的版块4、年度回帖人气最旺奖:回帖的点击率排名前2名5、年度最差斑竹:版块点击率低于500或主贴等于0-------------------------------------------------*/--1、论坛人气,点击率>1000为“人气熊旺旺”,否则为“一般般”--print '---->>>>各位大虾注意了,本论坛即将发布年度奖项<<<<----'if(select sum(SclickCount) from bbsSection) > 1000print '论坛人气评估: 人气熊旺旺大家辛苦了'elseprint '论坛人气评估: 一般般,大家加油了'--2、年度品牌版块:主贴量最多的版块--print '年度最佳版块'select Sname as 版块名称,StopicCount as 主贴数量,Sprofile as 简介from bbsSectionwhere StopicCount = (select max(StopicCount) from bbsSection)--3、年度倒胃版块:主贴量最少的版块--print '年度倒胃版块'select Sname as 版块名称,StopicCount as 主贴数量,Sprofile as 简介from bbsSectionwhere StopicCount = (select min(StopicCount) from bbsSection)--4、年度回帖人气最旺奖:回帖的点击率排名前2名--print '年度回帖人气最旺的前两位'select Uname as 大名,Uclass as 星级from bbsUsers where uid in(select top 2 TuID from bbsTopic order by TclickCount desc)--5、年度最差斑竹:版块点击率低于500或主贴等于0--if exists(select * from bbsSection where StopicCount = 0 or SclickCount <= 500)beginprint '请以下斑竹加油哦'select Sname as 版块名称,StopicCount as 主贴数量,SclickCount as 点击率from bbsSectionwhere StopicCount = 0 or SclickCount <= 500end-----------------------------------------------------------------------------------------------------------------*-------------------------------------------用户发主贴---------------------------------------------------------*/--声明变量存放用户ID和版块ID--declare @id intdeclare @bankuai int--将发贴人心酸果冻的ID存到变量@id中--select @id = UID from bbsUsers where Uname = '心酸果冻'--将版块编号放入@bankuai变量中--select @bankuai = SID from bbsSection where Sname like '%.Net%'--将发贴内容插入到主贴表--insert into bbsTopic(TsID,TuID,Tface,Ttopic,Tcontents)values(@bankuai,@id,3,'什么是.Net啊?','我靠!微软的.Net广告超过半个北京城啊....')--更新主贴表,.Net技术版块主贴数加1--update bbsSection set StopicCount = StopicCount + 1 where SID = @bankuai --更新用户积分,如果是新主题则积分加100否则加50分--if not exists(select * from bbsTopic where Ttopic like '什么是.Net啊?' and TuID <> @id)update bbsUsers set Upoint = Upoint + 100 where UID = @idelseupdate bbsUsers set Upoint = Upoint + 50 where UID = @id--更新积分后更新级别--update bbsUsers set Uclass = casewhen Upoint < 500 then 1when Upoint between 500 and 1000 then 2when Upoint between 1001 and 2000 then 3when Upoint between 2001 and 4000 then 4when Upoint between 4001 and 5000 then 5else 6end--所有用户等级从新排名--select 妮称= Uname,星级= casewhen Uclass = 0 then ' 'when Uclass = 1 then '★'when Uclass = 2 then '★★'when Uclass = 3 then '★★★'when Uclass = 4 then '★★★★'when Uclass = 5 then '★★★★★'else '★★★★★★'end,积分= Upoint from bbsUsers------------------------------------------------------------------------------------------------------------------/*----------------------跟贴----------------------------------------------------------------*/--声明变量用于存放回帖人编号及主贴ID--declare @GTid intdeclare @ZTid intdeclare @BKid int--获得可卡因的编号--select @GTid = UID from bbsUsers where Uname = '可卡因'--获得主贴的编号--select @ZTid = TID from bbsTopic where Ttopic like '%什么是.Net%'--获得版块编号--select @BKid = SID from bbsSection where Sname like '%.Net%'--插入回帖内容--insert into bbsReply(RtID,RsID,RuID,Rface,Rcontents)values(@ZTid,@BKid,@GTid,2,'.NET是微软极力推崇的企业级信息网络共享平台.')--回帖后主贴回复数量加1,点击率加1--update bbsTopic set TreplyCount = TreplyCount + 1,TclickCount = TclickCount + 1 where TID = @ZTid--回帖后相应的版块点击率加1--update bbsSection set SclickCount = SclickCount + 1 where SID = @BKid--回帖后给用户加分,如果是第一个回帖加100分,否则加50分--if ((select top 1 RuID from bbsReply where RtID = @ZTid order by Rtime) = @GTid)update bbsUsers set Upoint = Upoint + 100 where UID = @GTidelseupdate bbsUsers set Upoint = Upoint + 50 where UID = @GTid--更新用户相应的信息--update bbsUsers set Uclass = casewhen Upoint < 500 then 1when Upoint between 500 and 1000 then 2when Upoint between 1001 and 2000 then 3when Upoint between 2001 and 4000 then 4when Upoint between 4001 and 5000 then 5else 6end--发布主贴和跟贴--select 主贴作者= '心酸果冻',主贴发布时间= convert(varchar(10),Ttime,111),主题= Ttopic,内容= Tcontentsfrom bbsTopic where TID = @@identityselect 回帖作者= '可卡因',回帖时间= convert(varchar(10),Rtime,111),回帖内容= Rcontentsfrom bbsReply where RID = @@identity--星级从新排名--select 妮称= Uname,星级= casewhen Uclass = 0 then ' 'when Uclass = 1 then '★'when Uclass = 2 then '★★'when Uclass = 3 then '★★★'when Uclass = 4 then '★★★★'when Uclass = 5 then '★★★★★'else '★★★★★★'end,积分= Upoint from bbsUsers-----------------------------------------------------------------------------------------------------------------/*------------------------------------------删除帖子-----------------------------------------------------------*/--声明变量用于存放回帖人编号及主贴ID--declare @GTid intdeclare @BZid intdeclare @ZTid intdeclare @BKid int--获得斑竹心酸果冻的编号--select @BZid = UID from bbsUsers where Uname = '心酸果冻'--获得主贴的编号--select @ZTid = TID from bbsTopic where Ttopic like '%什么是.Net%'--获得所有回帖人的编号--select @GTid = RuID from bbsReply where RtID = @ZTid--获得版块编号--select @BKid = SID from bbsSection where Sname like '%.Net%'--被删帖的斑竹心酸果冻减去积分100分--update bbsUsers set Upoint = Upoint - 100 where UID = @BZid--回贴的帖主均减积分50分--update bbsUsers set Upoint = Upoint - 50 where UID = @GTid--帖子所在版块的主贴量减1--update bbsSection set StopicCount = StopicCount - 1 where SID = @BKid --如果回帖数量大于10给予严重警告,否则给予警告--if((select TreplyCount from bbsTopic where TID = @ZTid) > 10)print '影响很坏,给予严重警告一次'elseprint '给予警告一次'--开始删除,先删除跟贴在删除主贴--delete from bbsReply where RtID = @ZTiddelete from bbsTopic where TID = @ZTid--重新排名--update bbsUsers set Uclass = casewhen Upoint < 500 then 1when Upoint between 500 and 1000 then 2when Upoint between 1001 and 2000 then 3when Upoint between 2001 and 4000 then 4when Upoint between 4001 and 5000 then 5else 6end--重新星级排名--select 妮称= Uname,星级= casewhen Uclass = 0 then ' 'when Uclass = 1 then '★'when Uclass = 2 then '★★'when Uclass = 3 then '★★★'when Uclass = 4 then '★★★★'when Uclass = 5 then '★★★★★'else '★★★★★★'end,积分= Upoint from bbsUsers-----------------------------------------------------------------------------------------------------------------select * from bbsUsersselect * from bbsSectionselect * from bbsTopicselect * from bbsReply。
BBS论坛数据库设计文档
第1章绪论随着互联网日益深入社会生活,BBS开发技术发展至今,从CGI,ASP,到PHP已经日趋成熟,功能也更加丰富,但携着Sun公司的Java技术所实现的“一次编写,到处运行”的优势,继承这一衣钵的JSP技术越来越受到人们的注视。
BBS作为一种对外的展示窗口,进行内外信息交流,已成为大众的广泛需要。
为了进行更好的交流,用户想就自己的专业和爱好能和其他的用户进行及时专业的交流,这就有了论坛,这样以来我们就可以在网络这个虚拟的空间中方便地实现交流,BBS论坛是我们在这个地球村中生活的重要交流工具。
所以我选择使用JSP开发BBS论坛这一课题作为毕业设计。
Java是未来的主流开发技术,具有很多优势。
JSP则是Java在Internet/Intranet Web上的重要应用技术,得到了广泛的支持和承认,它可以和各种Java技术完好地结合在一起,从而实现非常复杂的应用。
本网站使用JSP + Mysql在MyEclipse系统开发的,从而创建一个更为稳定,高效,安全的运行环境。
本文主要实现了基于B/S模式的一种JSP论坛的设计与实现,主要功能是实现客户端和服务器端的动态交互。
BBS论坛系统最基本的功能首先是发表主题,其次是其他人员根据主题发表自己的看法。
此外,为了记录主题的发表者和主题的加复者信息民,系统还需要提供用户注册和登录的功能。
只有注册的用户登录后才能够发表和回复主题,浏览者(游客)只能浏览主题信息。
根据用户的需求及以上的分析,BBS论坛需要具备以下功能:显示各论坛类别及版面、查看自己发表的帖子、搜索帖子、查看根帖内容、用户注册、用户登录、用户留言、发表帖子、回复帖子、进入后台、论坛类别管理、版面管理、用户管理和用户注册。
设计BBS论坛系统所要考虑的问题主要有如何通过资源文件显示文字和使用静态代码块。
设计中力求界面友好、简洁,易于操作。
代码部分尽量避免逻辑错误,算法设计简单合理,尽量使程序具有较好的可读性,有利于其他的设计者对程序的阅读;力求对数据库操作的安全与稳定,尽量避免数据库操作异常,并要保证查询的快速无误。
BBS论坛数据库设计
任务五 使用Servlet实现BBS论坛
数据库设计汪燕本节ຫໍສະໝຸດ 标完成BBS论坛数据库设计
6.1.3 BBS论坛数据库设计
论坛数据库中主要包括四张表,分别是:
用户信息表(Userinfo): 表中记录注册用户名与登录口令 论坛版块表(Board): 表中存储着论坛中版块的标题名称与版块的ID 论坛主帖表(Topic): 表中记录了某个版块中的所有主题帖相关信息,其中通过BoardID与版块 建立了主从关系 论坛回帖表(Reply): 表中记录了针对某个主题帖发表的评论意见,通过TopicID与主题帖建立 了主从关系
6.1.3 BBS论坛数据库设计
BBS结构设计
永远在一起论坛2.0版(数据库结构设计) Bbs_MenuBig(论坛大类菜单表) 数据类型 长度 默认值 Int 4 主键,自动编号 Varchar 50 text 16 Varchar 200 Varchar 100 Int 4 0 DateTime 8 getdate() Bbs_MenuSmall(论坛小类菜单表) 数据类型 长度 默认值 Int 4 主键,自动编号 Varchar 50 Varchar 200 Varchar 500 Varchar 100 Int 4 0 DateTime 8 getdate() int 4 0 int 4 0 int 4 0 int 4 0 int 4 0 int 4 0 Bbs_Post(论坛帖子表) 长度 默认值 4 主键,自动编号 200 16 4 0 8 getdate() 4 0 50 4 0 4 0 4 0 4 0 8 getdate() 4 0 4 0
字段名称 User_Id User_Name User_Pwd User_Ask User_Answer User_Email User_Adddate User_Qx User_Online User_Ip User_LoginDate User_LoginCount
数据类型 int varchar varchar varchar varchar varchar datetime int int varchar datetime int
字段名称 UserState_Id UserState_PostCount UserState_BackCount UserState_ClassicCount UserState_Exp
BBS论坛系统设计--数据库课程设计
《数据库系统原理》课程设计报告BBS论坛系统设计一、问题描述与要求为了给同学们提供一个信息交流的平台,使同学们能够在论坛上发表一些新消息,使同学们能够在论坛上讨论一些专业知识,以通过BBS系统来和别人讨论计算机软件、硬件、Internet、多媒体、程序设计等等各种有趣的话题,更可以利用BBS系统来刊登一些“征友”、“廉价转让”及“电子产品”等启事。
而且BBS用户还可以相互之间交换各种文件。
只需简单地把文件置于BBS系统,其它用户就可以极其方便地下载这些文件。
为同学提供了很大的方便。
二、系统分析本系统分为注册模块,登录模块,浏览帖子模块,回复帖子模块,阅读帖子内容模块等几大模块。
注册模块:在登录论坛之前首先会检查该用户是不是全法用户,即是不是已经注册过,如果没有注册,则不能进行发表文章,只能浏览等有受限的功能,只有注册为合法用户后才能具有应用的各项功能。
登录模块:在进行浏览和回复帖子等操作之前要先进行登录,否则不能进行一些相关的操作,不能成为一个合法的用户。
浏览模块:进入该模块后就可以看到别人发表的各个帖子标题,对自己感兴趣的主题可以进行发表自己的意见,进行与其他人讨论相关的问题。
浏览详细内容模块:该模块是用来打开相关帖子的详细内容,对相关主题的内容都是显示在该模块中。
新建主题:该模块是用来发表自己的新帖子,建立一个自己的讨论的焦点。
别人可以对你发表的主题进行讨论参与。
回复帖子:该模块是对自己已经看到的帖子进行发表自己的观点进行的一个模块,在内容可以对以上主题进行回复相应的内容。
个人信息:用来查看和修改自己的个人相关的信息。
三、数据库设计3.1 数据结构的设计数据库在一个信息管理系统中占有非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率以及实现的效果产生影响。
合理的数据库结构设计可以提高数据存储的效率,保证数据库的完整和一致。
同时,合理的数据库结构也将有得程序的实现。
1.数据库需求分析用户的需求具体体现在各种信息的提供、保存、更新和查询方面,这就要求数据库结构能充分满足各种信息的输出和输入。
BBS论坛数据库设计 及ER图
2.2.1 用户 E-R 图
UID
Uname
UEmail
UBirtheday
Usex
BBSUsers
Uclass 2.2.2 主贴 E-R 图
UStatement
URegDate
UPoint UState
TID
TSID
TUID
TReplyCount
TEmotion
BBSTopic
说明 主帖编号 主帖版块编号 主帖用户编号 主帖回复次数 主帖表情 主帖标题 主帖内容 发帖时间 主帖点击次数 主帖最后点击时间
表 1-3-3
BBSSection 板块信息
表中列名
数据类型
sid
Int
SName
char
SMasterID
Int
SStatement
Varchar
SClickCount
Int
说明 版块编号
Sname SMasterID SStatement SClickCount STopicCount
Char Int varchar Int int
Not null Not null Not null Not null Not null
版块名称 版块编号 板块说明 版块点击次数 板块主题数
第二章 概要设计
2.1 基本概念介绍
⑴实体:现实世界中的各种事物的抽象。实体可以是具体的各种事物,如学生、教师、仓 库、图书馆等;也可以是抽象的概念,如课程、部门、学校等。
⑵联系:两个实体集之间的联系。可以分为三类: ①一对一联系(1:1) 如果对于实体集 A 中的每一个实体,实体集 B 中最多有一个实体与之联系,反之亦然,则 称实体集 A 和实体集 B 具有一对一联系,记作 1:1。 ②一对多联系(1:n) 如果对于实体集 A 中的每一个实体,实体集 B 中最多有 n(n≧1)个实体与之联系,对于实 体集 B 中的每一个实体,实体集 A 中最多有一个实体与之联系,则称实体集 A 和实体集 B 具有 一对多联系,记作 1:n。 ③多对多联系(m:n) 如果对于实体集 A 中的每一个实体,实体集 B 中最多有 n(n≧1)个实体与之联系,对于实 体集 B 中的每一个实体,实体 A 中最多有 m(m≧1)个实体与之联系,则称实体集 A 和实体集 B 具有多对多联系,记作 m:n。 ⑶属性:描述实体特征或性质。如学生实体的属性有:学号、姓名、性别、年龄等。课程 实体的属性有:课程号、课程名、学分等。
BBS论坛管理数据库数据库的设计与实现(ppt文档)
--插入数据
insert into
bbsSection(Sname,SmasterID,Sprofile,SclickCount,StopicCount) values('Java技术',3,'包含框架,开源,非技术区,J2SE',500,1)
insert into
bbsSection(Sname,SmasterID,Sprofile,SclickCount,StopicCount) values('.Net技术',5,'包含C#,ASP,.NET Framework,Web
BBSTopic发主贴表
BBSReply回贴表
表间关系图
提出任务
BBS论坛管理数据库的设计 BBS论坛管理数据库的实现
阶段一、插入测试数据
--插入测试数据 insert into bbsReply (RTID,RSID,RUID,RFace,RContents,RTime,RClickCount) values (1,1,5,2,'jsp乱码问题该怎么解决最好,因为我发现这 个问题好象在好多地方都看见了',getdate(),100) insert into bbsReply (RTID,RSID,RUID,RFace,RContents,RTime,RClickCount) values (1,1,4,4,'转换jsp..',getdate(),200) insert into bbsReply (RTID,RSID,RUID,RFace,RContents,RTime,RClickCount) values (2,2,2,3,'.net很精彩,就像ppmm啊!',getdate(),200)
简易论坛数据库设计
简易论坛后台数据库设计及实现--①创建数据库.sql--调用master数据库use mastergo--判断数据库bbsDB是否存在,如果存在,则删除if exists(select * from sysdatabases where name ='bbsDB')drop database bbsDB--exec xp_cmdshell 'mkdir f:project' --创建一个'f:project'go--创建bbsDB数据库create database bbsDB --主数据文件on(name='bbsDB_data', --主数据文件的逻辑名filename='f:\bbsDB\bbsDB_data.mdf', --主数据文件的物理名size=10MB, --主数据文件初始大小filegrowth=20% --主数据文件的增长率)LOG on --日志文件(name='bbsDB_log', --日志文件逻辑名filename='f:\bbsDB\bbsDB_data.ldf', --日志文件物理名size=1MB, --日志文件的初始大小filegrowth=10% --日志文件的增长率)--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★-- --②创建表bbsReply(回帖表).sql--运行bbsDB数据库use bbsDBgo--检查表bbsReply是否存在,如果存在就删除if exists(select * from sysobjects where name='bbsReply')drop table bbsReply--创建表bbsReplycreate table bbsReply(RID int not null identity(1,1),RTID int not null,RSID int not null,RUID int not null,RFace int,RContents varchar(200) not null,RTime datetime not null,RClickCount int not null,)--为表增加外键(RTID),引用bbsTopic表的主键盘TIDalter table bbsReply add constraint FK_RTID foreign key (RTID) references bbsTopic(TID)--为表增加外键(RSID),引用bbsSection表的主键SIDalter table bbsReply add constraint FK_RSID foreign key(RSID) references bbsSection(SID)--为表增加外键(RUID),引用bbsUsers表的主键UIDalter table bbsReply add constraint FK_RUID foreign key(RUID) references bbsUsers(UID)--增加默认值alter table bbsReply add constraint DK_RTime default(getdate()) for RTime--增加默认值alter table bbsReply add constraint DK_RClickCount default(0) for RClickCount--查看表数据select * from bbsReply--插入测试数据insert into bbsReply(RTID,RSID,RUID,RFace,RContents,RTime,RClickCount)values (1,1,5,2,'jsp乱码问题该怎么解决最好,因为我发现这个问题好象在好多地方都看见了',getdate(),100)insert into bbsReply(RTID,RSID,RUID,RFace,RContents,RTime,RClickCount)values (1,1,4,4,'转换jsp..',getdate(),200)insert into bbsReply(RTID,RSID,RUID,RFace,RContents,RTime,RClickCount)values (2,2,2,3,'.net很精彩,就像ppmm啊!',getdate(),200)--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★-- --③创建表bbsSection(版块表).sql--使用数据库bbsDBuse bbsDBgo--判断是否存在表bbsSection,如果存在就删除if exists(select * from sysobjects where name='bbsSection')drop table bbsSectiongo--创建表bbsSectioncreate table bbsSection(SID int identity(1,1) not null primary key, --版块编号Sname varchar(30) not null, --版块名称SmasterID int not null, --版主ID,外键;引用用户bbsUsers的UIDSprofile varchar(50), --版面简介SclickCount int, --点击率StopicCount int --发帖数)--为bbsSection创建外键,引用bbsUsers的UIDalter table bbsSectionadd constraint FK_Section_UIDforeign key (SmasterID) references bbsUsers(UID)--为bbsSection增加默认值alter table bbsSection add constraint DF_SclickCount default(0) for SclickCountalter table bbsSection add constraint DF_StopicCount default(0) for StopicCount--插入数据insert intobbsSection(Sname,SmasterID,Sprofile,SclickCount,StopicCount)values('Java技术',3,'包含框架,开源,非技术区,J2SE',500,1)insert intobbsSection(Sname,SmasterID,Sprofile,SclickCount,StopicCount)values('.Net技术',5,'包含C#,ASP,.NET Framework,Web Services',800,1) insert intobbsSection(Sname,SmasterID,Sprofile,SclickCount,StopicCount)values('Linux/Unix社区',5,'包含系统维护与使用区,程序开发区别',0,0) select * from bbsSection--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★-- --④创建表bbsTopic(主帖表).sql--使用bbsDBuse bbsDBgo--判断是否存在表bbsTopic,如果存在就删除if exists(select * from sysobjects where name='bbsTopic')drop table bbsTopicgo--创建表bbsTopiccreate table bbsTopic(TID int identity(1,1) not null primary key, --帖子编号TSID int not null, --版块编号;外键,引用bbsSection 表的主键SIDTUID int not null, --发帖人ID;外键,引用bbsUsers 表的主键UIDTReplyCount int not null, --回复数量TFace int, --发帖表情TTopic varchar(50) not null, --标题TContents varchar(200) not null, --发帖内容TTime datetime not null, --发帖时间TClickCount int not null, --点击数TState int not null, --状态,例如是否被锁,是否为精华帖子TLastReply datetime, --最后回复时间)--把TSID设置为外键,引用bbsSection表的SID主键alter table bbsTopic add constraint FK_Topic_SID foreign key(TSID) references bbsSection(SID)--把TUID设置为外键,引用bbsUsers表的UID主键alter table bbsTopic add constraint FK_Topic_UID foreign key(TUID) references bbsUsers(UID)--创建默认值alter table bbsTopic add constraint DF_TReplyCount default(0) for TReplyCountalter table bbsTopic add constraint DF_TTime default(getDate()) for TTimealter table bbsTopic add constraint DF_TClickCount default(0) for TClickCountalter table bbsTopic add constraint DF_TState default(1) for TState--插入测试数据insert into bbsTopic(TSID,TUID,TReplyCount,TFace,TTopic,TContents,TTime,TClickCount,T State,TLastReply)values(1,3,2,1,'还是JSP中...','jsp文件中读取...',2005-08-01,200,1,2005-08-01)insert into bbsTopic(TSID,TUID,TReplyCount,TFace,TTopic,TContents,TTime,TClickCount,T State,TLastReply)values(2,2,0,2,'部署.net...','项目包括WinSe...',getdate(),200,1,getdate())select * from bbsTopic--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★-- --⑤创建表bbsUsers(用户信息表).sql--使用bbsDB数据库use bbsDBgo--判断是否存在表bbsUsers,如果存在就删除if exists(select * from sysobjects where name='bbsUsers')drop table bbsUsersgo--创建表bbsUserscreate table bbsUsers(UID int identity(1,1) not null, --自动编号,标识列Uname varchar(15) not null, --昵称Upassword varchar(10), --密码Uemail varchar(50), --邮件Usex bit not null, --性别Uclass int, --级别(几星级)Uremark varchar(50), --备注UregDate datetime not null, --注册日期Ustate int null, --状态(是否禁言)Upoint int null, --积分(点数))goselect * from bbsUsers --查看表go--设主键alter table bbsUsers add constraint PK_UID primarykey(UID) --把UID设为主键--默认设置alter table bbsUsers add constraint DF_Upassword default (888888) for Upassword --初试密码默认为6个8alter table bbsUsers add constraint DF_Usexm default (1) forUsex --性别默认为1(男)alter table bbsUsers add constraint DF_UregDate default (getDate()) for UregDate --默认注册日期为当前日期alter table bbsUsers add constraint DF_Ustate default (0) for Ustate --状态默认为离线alter table bbsUsers add constraint DF_Uclass default (1) for Uclass --默认级别为1(星级)alter table bbsUsers add constraint DF_Upoint default (20) for Upoint --默认积分为20点--检查约束alter table bbsUsers add constraint CK_Uemail check(Uemail like '%@%') --邮件地址必须含有'@'字符alter table bbsUsers add constraint CK_Upasswordcheck(len(Upassword)>=6) --密码至少6位go--插入测试数据insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,UregDate,Usta te,Upoint)values('可卡因','HYXS007','SS@',1,'1','我要去公安局自首',getdate(),0,200)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,UregDate,Usta te,Upoint)values('心酸果冻','888888','lyzTTT@',0,'2','牵匹瘦马闯天下',getdate(),0,200)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,UregDate,Usta te,Upoint)values('冬篱儿','fangdong','bb@',1,'3','爱迷失在天堂',getdate(),0,600)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,UregDate,Usta te,Upoint)values('Supper','master','dd@',1,'6','BBS大斑竹',getdate(),0,5000)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,UregDate,Usta te,Upoint)values('可卡因','HYXS007','SS@',1,'1','我要去公安局自首',getdate(),0,200)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,UregDate,Usta te,Upoint)values('心酸果冻','888888','lyzTTT@',0,'2','牵匹瘦马闯天下',getdate(),0,200)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,UregDate,Usta te,Upoint)values('冬篱儿','fangdong','bb@',1,'3','爱迷失在天堂',getdate(),0,600)insert intobbsUsers(Uname,Upassword,Uemail,Usex,Uclass,Uremark,UregDate,Usta te,Upoint)values('Supper','master','dd@',1,'6','BBS大斑竹',getdate(),0,5000)--查询bbsUsersselect * from bbsUsers--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★-- --⑥对数据库的操作.sql--使用bbsDBuse bbsDBgo--查询bbsDB内的表select * from bbsUsers --用户表select * from bbsTopic --主帖表select * from bbsReply --回帖表select * from bbsSection --版块表/*1.使用系统变量,查询数据库系统情况*/--查询SQL Server的版本号、服务器的名称、错误号等print 'SQL Server的版本:' @@version--查询服务器名称print '服务器的名称:' @@servername--修改会发生错误,因为Upassword限制必须大于6位,用@@error接受update bbsUsers set Upassword='1234' where Uname='可卡因'print convert(varchar(5),@@error)/*2.网上有人举报可卡因涉嫌发表不合法言论,版主希望查看核实可卡因的发贴情况和权限*/set nocount on --不显示T-SQL语句影响的行数的信息print ' 'print '个人资料如下:' --查看可卡因个人资料select 昵称=Uname,登记=Uclass,个人说明=Uremark,积分=Upointfrom bbsUsers where Uname='可卡因'declare @userID int --定义变量,用于存放用户编号值select @userID=UID from bbsUsers where Uname='可卡因' --变量赋值print '可卡因发帖如下:' --查看可卡因发帖情况select 发帖时间=convert(varchar(10),Ttime,111),点击率=TClickCount, 主题=TTopic,内容=TContents,状态=TState from bbsTopic whereTUID=@userIDprint '可卡因回帖如下:' --查看可卡因回帖情况select 回帖时间=convert(varchar(10),Rtime,111),点击率=RClickCount, 内容=Rcontents from bbsReply where RuID=@userIDprint '可卡因权限:' --查看可卡因权限,如果积分大于30则可以发帖declare @point intselect @point=Upoint from bbsUsers where Uname='可卡因'if (@point>30)print '有权发贴'elseprint '无权发帖'go/*3.循环反复提份(每次提分50),直到积分平均分达到2000以上*/select * from bbsUsersdeclare @avg int,@scoreset @score=0while(1=1)beginupdate bbsUsers set Upoint=Upoint 50 where Ustate<>4 --除了被封杀的帖子set @score=@score 50 --记录提分值select @avg=avg(Upoint) from bbsUsers --获取提分后的平均分if(@avg>2000)breakendprint '提升分值:' convert(varchar(8),@score)/*4.给用户评星级:0~500评为1星级,500~1000评为2星级,1000~2000评为3星级,2000~4000评为4星级,4000~5000评为5星级,5000以上评为6星级*/--更新用户对应的等级update bbsUsersset Uclass=casewhen Upoint <500 then 1when Upoint between 500 and 1000 then 2when Upoint between 1001 and 2000 then 3when Upoint between 2001 and 4000 then 4when Upoint between 4001 and 5000 then 5else 6endprint '加分后的用户级别情况'select 昵称=Uname,星级=casewhen Uclass=0 then ''when Uclass=1 then '★'when Uclass=2 then '★★'when Uclass=3 then '★★★'when Uclass=4 then '★★★★'when Uclass=5 then '★★★★★'else '★★★★★★'end,积分=Upoint from bbsUsersgo/*5.查询心酸果冻的发帖数和回帖数,如果发帖数>0,显示发帖数和具体的帖子信息,否则显示发帖数为:0帖;同理,回帖也如此.最后显示帖子总计数量(发帖数回帖数),并根据帖子总量显示功臣级别*/select * from bbsTopicselect * from bbsUsersselect * from bbsReplydeclare @uid int --记录心酸果冻的的UIDdeclare @total int --记录总帖子数set @total=0select @uid=UID from bbsUsers where Uname='心酸果冻'print '心酸果冻发帖如下:'select @total=@total count(*) from bbsTopic where TUID=@uidprint '帖子如下:'select convert(varchar(10),TTime,111),点击率=TClickCount,内容=TContents from bbsTopic where TUID=@uidprint '心酸果冻回帖如下:'select @total=@total count(*) from bbsReply where RUID=@uidprint '帖子如下:'select convert(varchar(10),RTime,111),点击率=RClickCount,内容=RContents from bbsReply where RUID=@uidprint '心酸果冻帖数总计:' convert(varchar(8),@total)select 功臣级别=casewhen @total <10 then '新手上路'when @total between 10 and 20 then '侠客'when @total between 21 and 30 then '骑士'when @total between 31 and 40 then '精灵王'when @total between 41 and 50 then '光明使者'else '法老'endgo/*6.选出精华帖(回帖量最多的帖子为精华帖子)*/set nocount onselect * from bbsReplyselect * from bbsTopicselect * from bbsUsersselect * from bbsSectionprint '第一精华帖的信息如下'declare @max int --存储最多回帖数declare @rtid int --存储精华帖编号declare @ttopic varchar(50) --存储精华帖的标题declare @name varchar(20) --存储精华帖作者姓名declare @uid int --存储精华帖作者编号select top 1 @max=count(*),@rtid=rtid from bbsReply group by RTID order by RTIDselect @ttopic=TTopic,@uid=TUID from bbsTopic where TID=@rtid select @name=Uname from bbsUsers where UID=@uidselect 发帖时间=convert(varchar(10),TTime,111),点击率=TClickCount,作者=@name,主题=@ttopic,内容=Tcontentsfrom bbsTopic where TID=@rtidprint '回帖数:' convert(varchar(10),@max)print '如下所示'select 回帖时间=convert(varchar(10),RTime,111),点击率=RclickCount,回帖表情=casewhen RFace=1 then '^(oo)^猪头'when RFace=2 then '*:o)小丑'when RFace=3 then '[:|]机器人'when RFace=4 then '{^o~o^}老人家'else '(:<)吹水大王'end,回帖内容=RContents from bbsReply where RTID=@rtid/*7.论坛年度评估*/set nocount onprint '--->>>各位大虾注意了,本论坛现在发布年度无记名评奖<<<---'--人气年度评估(论坛总点击率>1000,为"人气熊旺旺";否则就为"一般般")--select * from bbsSectionprint '论坛人气年度评估'if (select sum(SclickCount) from bbsSection)>1000print '人气熊旺旺'elseprint '一般般'--年度品牌版块:主帖量最多的版块--select * from bbsUsers--select * from bbsTopic--select * from bbsSectionprint '年度品牌版块评估:'select 版块名称=Sname,主帖数量=StopicCount,简介=Sprofile from bbsSectionwhere StopicCount=(select max(StopicCount) from bbsSection)--年度倒胃版块:主帖最少的版块print '年度倒胃版块评估:'select 版块名称=Sname,主帖数量=StopicCount,简介=Sprofile from bbsSectionwhere StopicCount=(select min(StopicCount) from bbsSection)--年度回帖人气最旺奖:回帖的点击率排名前两名print '年度回帖人气最IN的前两名获奖作者:'select * from bbsUsersselect * from bbsTopicselect 大名=Uname,星级=Uclass from bbsUserswhere UID in(select top 2 TUID from bbsTopic order by TClickCount desc) --评选最差版主:如果存在发帖子量为或者点击率低于500的版块,则评选最差版主if exists(select * from bbsSection where StopicCount=0 or SclickCount<=500)beginprint '请下列版块斑竹加油哦!'select 版块名称=Sname,主帖数量=StopicCount,点击率=SclickCount from bbsSectionwhere StopicCount=0 or SclickCount<=500end/*8*/--用户发主帖后,需要更新相应版块(.NET技术版块)的主帖数,主帖数 1--用户发主帖后,酌情加分:如果主帖是新帖(别人没提及过),加100分,否则加50分. --用户积分添加后,更新用户的相应等级--在论坛上发布用户的新帖.--所有用户的等级重新排名/*--发主帖:心酸果冻在.NET技术版块发帖:怯怯的问:什么是.NET啊?微软的.NET广告超过半个北京城啊...*/select * from bbsUsersselect * from bbsSectionselect * from bbsTopicdeclare @userID varchar(10),@sID int --定义变量存放用户编号和版块编号select @userID=UID from bbsUsers where Uname='心酸果冻' --获取心酸果冻的用户编号select @sID=SID from bbsSection where Sname like '%.NET技术%' --获取.NET版块的编号--将心酸果冻的发帖插入主帖表insert into bbsTopic(TSID,TUID,TFace,Ttopic,Tcontents)values(@sID,@userID,3,'什么是.NET啊?','我靠!微软的.NET广告超过半个北京城啊...')--更新版块表:.NET技术版块主帖数 1update bbsSection set StopicCount=StopicCount 1 where SID=@sID--更新用户积分:如果是新主题,则积分增加100,否则增加50if not exists(select * from bbsTopic where TTopic like '什么是.NET 啊?' and TuID<>@userID)update bbsUsers set Upoint=Upoint 1 where UID=@userIDelseupdate bbsUsers set Upoint=Upoint 50 where UID=@userID--更新用户积分后,更新相应的级别update bbsUsersset Uclass=casewhen Upoint<500 then 1when Upoint between 500 and 1000 then 2when Upoint between 1001 and 2000 then 3when Upoint between 2001 and 4000 then 4when Upoint between 4001 and 5000 then 5else 6endwhere UID=@userID--对外发布心酸果冻的发帖(使用系统变量@@IDENTITY查出刚才插入的编号值)select 发帖作者='心酸果冬',发帖时间=convert(varchar(10),TTime,111),主题=TTopic,内容=TContents from bbsTopic where TID=@@IDENTITY--显示目前的最新排名select 昵称=Uname,星级=casewhen Uclass=0 then ''when Uclass=1 then '★'when Uclass=2 then '★★'when Uclass=3 then '★★★'when Uclass=4 then '★★★★'when Uclass=5 then '★★★★★'else '★★★★★★'end,积分=Upoint from bbsUsersgo/*9*/--在论坛上发布主帖和跟帖.--论坛用户星级重新排名./*可卡因回复主帖:"什么是.NET啊?"笑呵呵的回复道:".NET是微软力推的企业级信息网络共享平台."*/set nocount onselect * from bbsUsersselect * from bbsReplyselect * from bbsTopicselect * from bbsSectiondeclare @uid intselect @uid=UID from bbsUsers where Uname='可卡因'print @uiddeclare @tid intdeclare @sid intselect @tid=TID,@sid=TSID from bbsTopic where TTopic like '%还是JSP 中%'print @tidprint @sidinsert into bbsReply (RTID,RSID,RUID,RFace,RContents)values(@tid,@sid,@uid,4,'.NET是微软力推的企业级信息网络共享平台.')--用户回帖后,需要更新对应主帖的信息:回复数量 1,点击率 1.update bbsTopic set TClickCount=TClickCount1,TReplyCount=TReplyCount 1--用户回帖后,还需要更新对应版块的点击率,点击率 1.update bbsSection set StopicCount=StopicCount 1--用户回帖后,酌情加分:如果是该帖的第一回帖人(即第一个回帖的),加100分;否则加50分.--方法一/*declare @treplycount intselect @treplycount=TReplyCount from bbsTopic where @tid=TID if (@treplycount=1)update bbsUsers set Upoint=Upoint 100elseupdate bbsUsers set Upoint=Upoint 50*/--方法二declare @treplycount intselect @treplycount=count(*) from bbsReply where RTID=@tidif(@treplycount=1)update bbsUsers set Upoint=Upoint 100elseupdate bbsUsers set Upoint=Upoint 50--用户积分添加后,更新用户的相应等级.update bbsUsers set Uclass=casewhen Upoint<500 then 1when Upoint between 500 and 1000 then 2when Upoint between 1001 and 2000 then 3when Upoint between 2001 and 4000 then 4when Upoint between 4001 and 5000 then 5else 6endwhere UID=@uid--在论坛上发布主帖和跟帖--显示主帖select * from bbsTopic where TID=@tid--显示回帖select * from bbsReply where RID=@@IDENTITY--论坛用户星级重新排名select 昵称=Uname,星级=casewhen Uclass=0 then ''when Uclass=1 then '★'when Uclass=2 then '★★'when Uclass=3 then '★★★'when Uclass=4 then '★★★★'when Uclass=5 then '★★★★★'else '★★★★★★'end,积分=Upoint from bbsUsers/*10为了维护论坛环境的"空气清新",斑竹会定期检查帖子或核实网友对某个帖子的投诉,然后删除不合法的发帖*/--删除帖子--主题:什么是.NET?--内容:我靠!微软的.NET广告超过了半个北京城啊.select * from bbsTopicselect * from bbsUsersselect * from bbsReplyselect * from bbsSectiondeclare @tid intdeclare @uidt intselect @tid=TID,@uidt=TUID from bbsTopic where TTopic like '%什么是.NET 啊%'--帖主分数-100update bbsUsers set Upoint=Upoint-100--跟贴的帖主分数-50update bbsUsers set Upointdelete from bbsTopic where TID=@tidselect * from bbsReply where RTID=1/*11*//*12*/--调用系统存储过程查看用户表(bbsUsers)的相关信息use bbsDBgoexec sp_helpconstraint bbsUsers --查看表bbsUsers的约束exec sp_helpindex bbsUsers --查看表bbsUsers的索引gouse mastergoexec xp_cmdshell 'mkdir e: est',no_output --在e:下创建文件夹test exec xp_cmdshell 'dir e:' --查看文件夹/*13创建带参数的存储过程*/--编写存储过程proc_find1,实现查找某个用户的发贴情况use bbsDBgoif exists(select * from sysobjects where name='proc_find1')drop procedure proc_find1gocreate procedure proc_find1@userName varchar(10) --输入参数用户名asset nocount on--获取用户对应的用户编号UIDdeclare @userID varchar(10)select @userID=UID from bbsUsers where Uname=@userName--如果在主帖表中存在该用户发表的主帖if exists(select * from bbsTopic where TuID=@userID)beginprint @userName '发表的主帖如下:'select 发贴时间=convert(varchar(10),TTime,111),点击率=TClickCount,主题=TTopic,内容=Tcontents from bbsTopic where TUID=@userIDendelseprint @userName '没有发表过主帖'if exists(select * from bbsReply where RUID=@userID)beginprint @userName '发表的回帖如下:'select 发帖时间=convert(varchar(10),RTime,111),点击率=RClickCount,回帖内容=Rcontents from bbsReply whereRUID=@userIDendelseprint @userName '没有发表过回帖'goexec proc_find1 '心酸果冻'/*14创建带返回值的存储过程*/--编写存储过程proc_find2,查找某个用户的发贴情况,并返回发贴数和回帖数select * from bbsUsersif exists(select * from sysobjects where name='pro_find2')drop procedure pro_find2gocreate procedure pro_find2@userName varchar(10), --输入参数:用户名@sumTopic int output, --输出参数:主帖数@sumReply int output --输出参数:回帖数asset nocount ondeclare @userID varchar(10)select @userID=UID from bbsUsers where Uname=@userNameif exists(select * from bbsTopic where TUID=@userID)begin--获取主帖数,保存在输出参数中select @sumTopic=count(*) from bbsTopic where TUID=@userIDprint @userName '发表主帖如下:'select 发贴时间=convert(varchar(10),TTime,111),点击率=TClickCount,主题=TTopic,内容=TContents from bbsTopic where TUID=@userIDendelsebeginset @sumTopic=0 --设置发帖数为0print @userName '没有发表过主帖.'endif exists(select * from bbsReply where RUID=@userID)begin--获取回帖数,保存在输出参数中select @sumReply=count(*) from bbsReply where RUID=@userIDprint @userName '发表的回帖如下:'select 回帖时间=convert(varchar(10),Rtime,111),点击率=RclickCount,回帖内容=Rcontents from bbsReply whereRUID=@userIDendelsebeginset @sumReply=0print @userName '没有发表过回帖.'end--测试存储过程pro_find2set nocount ondeclare @sum1 int,@sum2 intexec pro_find2 '心酸果冻',@sum1 output,@sum2 outputprint @sum1print @sum2--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★--★★★★★-- --⑦设置用户及用户权限.sql--为SQL创建新的登录用户David,密码为223251EXEC sp_addlogin 'David','223251'--为David用户设置访问bbsDB的权限use bbsDBgoEXEC sp_grantdbaccess 'David','David'--为David用户设置可以在bbsDB中创建表的权限GRANT create table to David--为David用户设置对bbsDB中的表的权限,David是版块斑竹GRANT update on bbsUsers to DavidGRANT select,delete on bbsTopic to DavidGRANT select,delete on bbsReply to David。
基于PHP+MySQL技术BBS论坛设计的开发与实现
1引言随着Internet技术的快速发展,人与人之间的交流方式逐渐增多。
网络视频、网络聊天、博客已成为人们彼此沟通、交流信息的主要方式。
此外,为了方便在某一专业领域探讨问题和发表意见,Internet上还出现了在线论坛。
在论坛上,人会根据自己的学识、经验发表意见或提出解决问题的方法。
通过论坛系统可以随时获得各种最新信息;也可以通过论坛系统与别人讨论计算机软件、硬件、Internet、多媒体、程序设计以及生物学、医学等各种有趣的话题;还可以利用论坛系统来发布征友、廉价转让、招聘人才、求职应聘等启事;更可以召集亲朋好友到聊天室内高谈阔论……并且现在很多商务网站开始对论坛重视了起来,纷纷在自己的网站上开设论坛,作为与网民交流的空间,以此来吸引客户,服务客户。
由此可见,论坛系统是一种非常必要的系统。
在这个数字化时代,全世界有千千万万个网站昼夜不停地提供服务。
PHP+MySQL这一对,Web应用开发的利器,在从电子商务到网络办公,从邮件服务到大型综合网站的广泛应用,都显示了其强大的功能。
目前网上的网页有静态网页和动态网页两种形式。
静态网页不能自动更新,更新只能通过重新编写HTML页来实现,所以静态网页的制作和维护的工作量相当大。
它的内容也不会因用户、浏览时间的变化而随之变化,所以实现人机交互有相当大的局限性,功能上有太多的限制。
而动态网页的实现与静态网页不同,它由客户端向服务器提出申请,服务器根据用户请求,把动态网页内部的代码在服务器端进行相应的处理,再把结果发回客户端。
因此,动态网页有以下特点:客户端看到的不是源文件,本身不用任何处理;不同用户、不同时间、不同地点浏览同一个网页返回的结果可以不同;动态网页只有经过用户浏览时才会返回一个完整的网页,而其本身并不是一个独立的网页文件;动态网页构建的网站维护起来比较容易,只需更新数据库内容即可。
PHP本身就是一种编程语言,它是吸收了C、Java等语言的综合优势而创建开发的一种新语言。
bbs论坛系统课程设计
滨江学院课程设计报告学年学期2011-2012学年第一学期课程名称数据库系统课程设计院系计算机系专业软件工程2008级学号***********姓名童琛指导教师刘生二O一一年十二月三十日一.需求分析1.功能需求:开发bbs论坛系统是为了提供用户一个交流的平台,为广大用户提供交流经验,探讨问题的社区。
既然是一个以用户主导的系统,首先我们将用户划分为三类,游客,一般用户和管理员。
具体用户功能实现如下:游客:只能浏览板块和别人发布的帖子。
一般用户:可以浏览回复别人的帖子,也可自己发布新帖,修改自己的帖子和自己的评论。
浏览方式可使通过板块浏览也可以搜索自己发布的所有帖子。
管理员:管理员能够实现最多的功能,一般用户的功能他都具有,管理员还能创建,删除板块,删除别人的非法帖子,删除用户,删除评论,设置加精置顶帖等功能。
2.系统需求:我们将本论坛系统根据上面的功能需求划分为几个功能块。
登陆模块:该模块用于用户的注册和登陆认证,通过对登陆用户对象的authority属性来给用户返回相应的节目。
浏览帖子模块:用户通过点击自己感兴趣的论坛板块,在里面可以看到该板块里面用户所发布的帖子主题。
帖子详细内容板块:用户通过点击帖子的标题,进入查看帖子的详细内容,也可以看到其他用户对于该帖子的评论和回复。
如果是普通用户的话,也可以对该帖子直接进行回复。
发布和修改帖子模块:用户通过登陆认证后,可以在该板块中发布新帖。
至于帖子的修改功能也是集成到该模块中的,如果要修改帖子,系统先将要修改的帖子加载进来,然后用户在里面修改,修改完之后再重新发布。
管理员模块:该模块主要实现管理员的功能,实现删除帖子,删除评论,删除用户,创建板块删除板块等日常管理维护管理功能。
二.系统概念结构设计1用户e-r图2.3.评论e-r图4.板块e-r图5.实体e-r图三.系统逻辑结构设计1.登陆模块设计2.浏览帖子模块设计3.发布帖子模块4.管理员模块管理员登陆板块管理用户管理帖子管理创建和删除板块删除用户删除帖子四.界面设计1.登录界面主要代码:<s:form action="Login.action" method="post"><s:textfield name="username" label="用户名"></s:textfield><s:password name="pwd" label="密码"></s:password><s:submit value="登陆"></s:submit><s:hidden name="type" value="addUser"></s:hidden><a href="register.jsp">注册</a></s:form><table border=1><%User user=new User();session.setAttribute("user",user);Cateqoryimpl cq = new Cateqoryimpl();List<Cateqory> cateqorys = cq.queryAllCateqory();List<String> cateqorynames=new ArrayList();Iterator<Cateqory> it = cateqorys.iterator();int counts = 0;int left = 0;int right = 0;while (it.hasNext()) {counts++;Cateqory cat = null;cat = it.next();cateqorynames.add(cat.getCateqoryname());if ((counts % 3) == 1) {left++;out.print("<tr>");}out.print("<td>");%><ahref="CateqoryShow?type=show&cateqoryid=<%=cat.getCateqoryid()%>"><%=cat.getCateqory name()%></a><%out.print("</td>");if ((counts %3) == 0) {right++;out.print("</tr>");}}%><%session.setAttribute("cateqorynames",cateqorynames);%>2.注册界面主要代码:<s:form action="register"><s:textfield name="username" label="用户名"></s:textfield><s:password name="pwd" label="密码"></s:password><s:password name="repwd" label="密码确认"></s:password><s:radio list="#{1:'男',0:'女'}" name="sex" label="性别"></s:radio><s:textfield name="email" label="E-mail"> </s:textfield><s:hidden name="type" value="addUser"></s:hidden><s:submit value="提交"></s:submit></s:form>3.管理员界面主要代码:<%User user=(User)session.getAttribute("user");%>欢迎<%=user.getUsername()%>登陆<a href='register?type=queeryAll'>用户管理</a><a href="CateqoryShow?type=controlinit">板块管理</a><a href="UserArticle?userid=<%=user.getUserid()%>&type="queeryAll"">我的帖子</a> <a href="addArticle.jsp">发新帖</a><table border=1><%Cateqoryimpl cq = new Cateqoryimpl();List<Cateqory> cateqorys = cq.queryAllCateqory();Iterator<Cateqory> it = cateqorys.iterator();int counts = 0;int left = 0;int right = 0;while (it.hasNext()) {counts++;Cateqory cat = null;cat = it.next();if ((counts % 3) == 1) {left++;out.print("<tr>");}out.print("<td>");%><ahref="CateqoryShow.action?type=show&cateqoryid=<%=cat.getCateqoryid()%>"><%=cat.getCa teqoryname()%></a><%out.print("</td>");if ((counts % 3) == 0) {right++;out.print("</tr>");}}if (right < left) {out.print("</tr>");}%></table>4.发布帖子:主要代码:<s:form action="UserArticle"><s:textfield name="articlename" label="主题" cols="50"></s:textfield><s:select list="#session.cateqorynames" name="cateqoryname" label="板块"></s:select> <s:textarea name="article" label="内容" cols="50" rows="15"></s:textarea><s:hidden name="type" value="addArticle"></s:hidden><s:submit value="提交"></s:submit></s:form>5.管理员管理帖子:<%User user = (User) session.getAttribute("user");%><h1><s:property value="cat.cateqoryname"/></h1><table><tr><td>主題</td><td>日期</td><td>作者</td><%if (user.getAuthority() == 1) {%><td>操作</td><%}%></tr><s:iterator value="articles" id="art"><tr><td><s:if test="%{#art.leavel==3}"><font color="red">置顶</font></s:if><s:if test="%{#art.leavel==2}"><font color="yellow">精</font></s:if><a href='contentshow.action?articleid=<s:property value="articleid"/>'><s:property value="articlename"/></a></td><td ><s:property value="publishtime"/></td><td ><s:property value="userid"/></td><%if (user.getAuthority() == 1) {%><td><a href='UserArticle?type=deletebysup&articleid=<s:property value="articleid"/>'>删除</a><s:if test="%{#art.leavel==3}"><a href='UserArticle?type=setleavel&leavel=0&articleid=<s:property value="articleid"/>'>取消置顶</a></s:if><s:if test="%{#art.leavel==2}"><a href='UserArticle?type=setleavel&leavel=0&articleid=<s:property value="articleid"/>'>取消精华</a></s:if><s:if test="%{#art.leavel==0}"><a href='UserArticle?type=setleavel&leavel=2&articleid=<s:property value="articleid"/>'>加精</a><a href='UserArticle?type=setleavel&leavel=3&articleid=<s:property value="articleid"/>'>置顶</a></s:if></td><%}%></tr></s:iterator></table>以上是一些主要的页面,还有一些页面就不一一贴出了,一共有11张界面五.数据库表结构创建的SQL语句代码Comments表:用于存放文章回复的信息CREATE TABLE `comments` (`commentsid` int(8) NOT NULL AUTO_INCREMENT,`articleid` int(8) DEFAULT NULL,`comments` varchar(255) DEFAULT NULL,`publishtime` date DEFAULT NULL,PRIMARY KEY (`commentsid`),KEY `articleid` (`articleid`),CONSTRAINT `comments_ibfk_1` FOREIGN KEY (`articleid`) REFERENCES `article` (`articleid`) ON DELETE CASCADE)User表:用来存放用户信息CREATE TABLE `user` (`userid` int(8) NOT NULL AUTO_INCREMENT,`username` varchar(20) DEFAULT NULL,`pwd` varchar(20) DEFAULT NULL,`authority` int(1) DEFAULT '3',`email` varchar(20) DEFAULT NULL,`sex` int(1) DEFAULT NULL,`registertimer` date DEFAULT NULL,PRIMARY KEY (`userid`))Article表:帖子表主要用来存放帖子信息CREATE TABLE `article` (`userid` int(8) DEFAULT NULL,`articleid` int(8) NOT NULL AUTO_INCREMENT,`article` varchar(255) DEFAULT NULL,`articlename` varchar(20) DEFAULT NULL,`publishtime` date DEFAULT NULL,`cateqoryid` int(8) DEFAULT NULL,PRIMARY KEY (`articleid`),KEY `userid` (`userid`),KEY `cateqoryid` (`cateqoryid`),CONSTRAINT `article_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`) ON DELETE CASCADE,CONSTRAINT `article_ibfk_2` FOREIGN KEY (`cateqoryid`) REFERENCES `cateqory` (`cateqoryid`))Category表:用来存放板块信息CREATE TABLE `cateqory` (`cateqoryid` int(8) NOT NULL AUTO_INCREMENT,`userid` int(8) DEFAULT NULL,`cateqoryname` varchar(20) DEFAULT NULL,PRIMARY KEY (`cateqoryid`),KEY `userid` (`userid`),CONSTRAINT `cateqory_ibfk_1` FOREIGN KEY (`userid`) REFERENCES `user` (`userid`)六.设计小结通过本系统的设计,是我能够熟练的将数据库知识运用到系统开发中。
bbs论坛系统详细设计说明书
BBS详细设计说明书编写人:刘彦阳王雪晴目录前言 (3)一、引言 (4)1.1编写目的 (4)1.2项目背景 (4)1.3定义 (4)1.4参考资料 (6)二、系统结构 (7)2.1需求概述 (7)2.2软件结构 (7)三、模块设计说明 (9)3.1功能模块设计 (9)3.2功能 (10)3.3算法实现 (21)3.4流程逻辑 (22)3.5接口 (22)3.6存储分配 (23)3.7限制条件 (24)3.8测试计划 (24)3.9尚未解决的问题 (24)前言随着计算机网络的飞速发展,网民人数越来越多,BBS论坛作为一种交流思想和感情的桥梁,快捷方便,正受到越来越多网友的喜爱,并深刻地影响人类的交流方式。
BBS是互联网一种人与人之间交互的必备工具,特别是做网站必备。
BBS可以通过WEB 浏览器访问,并且实现上传文件等诸多功能。
网民们便逐步开始接受这种使用方便快捷、功能日渐强大的系统。
在它上面网民们可以张贴和发布各种各样的信息,讨论各式话题。
随着中国网络的普及和计算机及其外设的大幅度降价,Internet这个概念逐渐深入人心。
中国网民的数量呈几何级数量增长,BBS的普及程度也直追Email。
每个网站几乎都拥有自己的BBS或者BBS链接, BBS社区提供给用户的服务是全面而且非常友好的,用户在社区中可以根据自己的喜好设置不同的显示风格,根据自己的需求定制各种服务。
一、引言1.1编写目的通过BBS系统可随时取得国际最新的软件及信息,也可以通过BBS系统来和别人讨论计算机软件、硬件、Internet、多媒体、程序设计以及医学等等各种有趣的话题,更可以利用BBS系统来刊登一些“征友”、“廉价转让”及“公司产品”等启事。
通过此bbs论坛的编写,熟悉的工作流程。
为了对BBS论坛管理系统中的功能和流程有更详细的了解,编写本详细说明书。
本说明书在系统概要设计的基础上,进一步细化系统各功能模块的设计,确定系统各模块的详细实现方法(包括实现算法,采用的数据结构等),为编码实现阶段的工作提供依据。
bbs数据库原理实验报告总结
实验主题:bbs数据库原理实验报告总结实验内容:1. 实验目的:通过本次实验,加深对数据库原理的理解,掌握数据库设计和管理的基本方法。
2. 实验环境:本次实验使用MySQL数据库管理系统,通过命令行和可视化工具对数据库进行操作。
3. 实验步骤:分为数据库设计和数据库管理两个部分。
- 数据库设计:根据实际情况设计全球信息站论坛系统的数据库,包括用户信息、帖子信息、评论信息等。
- 数据库管理:使用SQL语句创建、查询、更新和删除数据库中的数据,进行权限管理和事务处理等操作。
实验过程及结果:1. 数据库设计:根据全球信息站论坛系统的需求,设计了包括用户表、帖子表、评论表在内的多个表,并建立了它们之间的关联。
2. 数据库管理:通过命令行和可视化工具,成功使用SQL语句对数据库中的数据进行增删改查操作,实现了对论坛系统的基本管理功能。
3. 实验结果表明,本次实验达到了预期的目的,加深了对数据库原理的理解,掌握了数据库设计和管理的基本方法。
实验总结及体会:1. 通过本次实验,深刻感受到数据库在信息管理中的重要性,了解了数据库设计和管理的基本概念和技术,增强了对数据库知识的兴趣。
2. 在实验过程中,遇到了一些问题,如数据库表的设计不够完善、SQL语句的书写错误等,但通过仔细思考和查阅资料,最终都得到了解决,加强了自己的问题解决能力。
3. 实验中还发现了数据库设计不合理和管理不当可能带来的安全性和性能问题,这也让我更加重视数据库的设计和管理工作。
4. 本次实验对我来说是一次很好的学习机会,通过实际动手操作,更深入地理解了数据库原理,也为今后的学习和工作奠定了基础。
实验心得及展望:1. 本次实验让我对数据库的重要性有了更深刻的理解,也为我今后的学习和工作提供了很好的基础。
2. 在今后的学习中,我将继续加强对数据库知识的学习和实践,不断提升自己的数据库设计和管理水平。
3. 通过本次实验,我也意识到了不断学习和拓展知识面的重要性,将不断追求进步,为自己的职业发展打下坚实的基础。
数据库设计BBS论坛文档
第1章绪论随着互联网日益深入社会生活,BBS开发技术发展至今,从CGI,ASP,到PHP已经日趋成熟,功能也更加丰富,但携着Sun公司的Java技术所实现的“一次编写,到处运行”的优势,继承这一衣钵的JSP技术越来越受到人们的注视。
BBS作为一种对外的展示窗口,进行内外信息交流,已成为大众的广泛需要。
为了进行更好的交流,用户想就自己的专业和爱好能和其他的用户进行及时专业的交流,这就有了论坛,这样以来我们就可以在网络这个虚拟的空间中方便地实现交流,BBS论坛是我们在这个地球村中生活的重要交流工具。
所以我选择使用JSP开发BBS论坛这一课题作为毕业设计。
Java是未来的主流开发技术,具有很多优势。
JSP则是Java在Internet/Intranet Web上的重要应用技术,得到了广泛的支持和承认,它可以和各种Java技术完好地结合在一起,从而实现非常复杂的应用。
本网站使用JSP + Mysql在MyEclipse系统开发的,从而创建一个更为稳定,高效,安全的运行环境。
本文主要实现了基于B/S模式的一种JSP论坛的设计与实现,主要功能是实现客户端和服务器端的动态交互。
BBS论坛系统最基本的功能首先是发表主题,其次是其他人员根据主题发表自己的看法。
此外,为了记录主题的发表者和主题的加复者信息民,系统还需要提供用户注册和登录的功能。
只有注册的用户登录后才能够发表和回复主题,浏览者(游客)只能浏览主题信息。
根据用户的需求及以上的分析,BBS论坛需要具备以下功能:显示各论坛类别及版面、查看自己发表的帖子、搜索帖子、查看根帖内容、用户注册、用户登录、用户留言、发表帖子、回复帖子、进入后台、论坛类别管理、版面管理、用户管理和用户注册。
设计BBS论坛系统所要考虑的问题主要有如何通过资源文件显示文字和使用静态代码块。
设计中力求界面友好、简洁,易于操作。
代码部分尽量避免逻辑错误,算法设计简单合理,尽量使程序具有较好的可读性,有利于其他的设计者对程序的阅读;力求对数据库操作的安全与稳定,尽量避免数据库操作异常,并要保证查询的快速无误。
简单bbs数据库设计
路漫漫其修远兮,吾将上下而求索 - 百度文库KMUST JAVA论坛数据库文档KMUST JAVA BBSDBMS: ORACLE Version 10g作者:KMUST JAVA论坛开发小组成员版本:0.1时间:2011/7/19说明:KMUST JAVA论坛数据库设计文档I 数据库表关系图II 数据库表清单名称说明T_ADMIN 管理员表T_ARTICLE 帖子表T_AVATAR 头像表T_CATEGORY 论坛分类表T_FEEDBACK 用户意见反馈表T_FORUM 论坛版块表T_NOTICE 公告表T_RESPONSE 反馈应答表T_SCORE 用户积分明细表T_USER 用户表II.1 表格T_ADMINII.1.1 表格T_ADMIN的列清单名称注释数据类型长度主要的外来键ID 管理员编号NUMBER(2) 2 TRUE FALSE NAME 管理员用户名VARCHAR2(30) 30 FALSE FALSE PASSWORD 管理员密码VARCHAR2(30) 30 FALSE FALSE REGTIME 管理员注册时间DATE FALSE FALSE AVATARID 管理员头像编号NUMBER(3) 3 FALSE TRUEII.1.1.1表格T_ADMIN的触发器清单名称注释TRI_DELETE_ADMIN_INFO 在删除管理员之前,修改该管理员发布的公告和应答记录,将这些记录中的管理员编号改为系统默认管理员编号TRI_DELETE_ADMIN_INFO的文本:CREATE OR REPLACE TRIGGER TRI_DELETE_ADMIN_INFObefore delete on t_admin for each rowbeginupdate t_notice set adminid=1where adminid=:OLD.id;update t_response set adminid=1where adminid=:OLD.id;end;/ALTER TRIGGER TRI_DELETE_ADMIN_INFO ENABLE;II.2 表格T_ARTICLEII.2.1 表格T_ARTICLE的列清单名称注释数据类型长度主要的外来键ID 帖子编号NUMBER(10) 10 TRUE FALSEPID 父帖编号,0表示该帖子为主题帖NUMBER(10) 10 FALSE FALSEROOTID 主题帖编号,主题帖的该字段值与其自身编号相同NUMBER(10) 10 FALSE FALSETITLE 帖子标题VARCHAR2(255) 255 FALSE FALSE CONTENT 帖子内容CLOB FALSE FALSE PDATE 发表时间DATE FALSE FALSEISLEAF 是否为叶子结点(即没有被回复的帖子),0表示没有被回复,1表示被回复过NUMBER(1) 1 FALSE FALSEUSERID 发帖用户编号NUMBER(5) 5 FALSE TRUE FORUMID 帖子所属版块NUMBER(3) 3 FALSE TRUE II.2.1.1表格T_ARTICLE的触发器清单名称注释TRI_ADD_DEFAULT_SCORE 用户每发一个帖子,不论是主题帖还是回复帖,均为该用户加2分的积分,此时用户积分明细表中的该帖子积分记录的评价用户编号与发帖用户编号相同TRI_ADD_DEFAULT_SCORE的文本:CREATE OR REPLACE TRIGGER TRI_ADD_DEFAULT_SCOREafter insert on t_article for each rowbegininsert into t_score values(:NEW.id,:erid,:erid,2); end;/ALTER TRIGGER TRI_ADD_DEFAULT_SCORE ENABLE;TRI_DELETE_ARTICLE_SCORE 删除帖子之前,同时从用户积分明细表中删除有关该帖子的积分记录TRI_DELETE_ARTICLE_SCORE的文本:CREATE OR REPLACE TRIGGER TRI_DELETE_ARTICLE_SCORE before delete on t_article for each rowbegindelete from t_score where articleid =:OLD.id; end;/ALTER TRIGGER TRI_DELETE_ARTICLE_SCORE ENABLE;TRI_UPDATE_ISLEAF_ROOTID 发帖之前,如果该帖是主题贴,则将其rootid置为该帖子的id,如果是回复帖,由将被回复的帖子的isleaf字段置为1,表示非叶子结果(被回复过的帖子)TRI_UPDATE_ISLEAF_ROOTID的文本:CREATE OR REPLACE TRIGGER TRI_UPDATE_ISLEAF_ROOTIDbefore insert on t_article for each rowdeclare tid t_article.id%type;beginif(:NEW.pid =0)thentid :=:NEW.id;:NEW.rootid := tid;elseupdate t_article set isleaf =1where id=:NEW.pid;end if;end;/ALTER TRIGGER TRI_UPDATE_ISLEAF_ROOTID ENABLE;II.3 表格T_AVATARII.3.1 表格T_AVATAR的列清单名称注释数据类型长度主要的外来键ID 头像编号NUMBER(3) 3 TRUE FALSE IMAGE 头像图片BLOB FALSE FALSEII.4 表格T_CATEGORYII.4.1 表格T_CATEGORY的列清单名称注释数据类型长度主要的外来键ID 分类编号NUMBER(3) 3 TRUE FALSE TITLE 分类标题VARCHAR2(50) 50 FALSE FALSEII.5 表格T_FEEDBACKII.5.1 表格T_FEEDBACK的列清单名称注释数据类型长度主要的外来键ID 意见编号NUMBER(5) 5 TRUE FALSE USERID 发表意见的用户编号NUMBER(5) 5 FALSE TRUE PDATE 意见发表时间DATE FALSE FALSE TITLE 意见标题VARCHAR2(50) 50 FALSE FALSE CONTENT 意见内容VARCHAR2(2000) 2000 FALSE FALSEISSOLVED 是否已回复,初始值为0,表示未回复,1表示已回复NUMBER(1) 1 FALSE FALSEII.5.1.1表格T_FEEDBACK的触发器清单名称注释TRI_DELETE_RESPONSE 在删除用户意见之前,先将反馈应答表中回复该意见的记录删除,以避免外键约束影响TRI_DELETE_RESPONSE的文本:CREATE OR REPLACE TRIGGER TRI_DELETE_RESPONSEbefore delete on t_feedback for each rowbegindelete from t_response where feedbackid =:OLD.id;end;/ALTER TRIGGER TRI_DELETE_RESPONSE ENABLE;II.6 表格T_FORUMII.6.1 表格T_FORUM的列清单名称注释数据类型长度主要的外来键ID 版块编号NUMBER(3) 3 TRUE FALSETITLE 版块名称VARCHAR2(50) 50 FALSE FALSE DESCRIPTION 版块描述VARCHAR2(200) 200 FALSE FALSE CATEGORYID 所属分类的编号NUMBER(3) 3 FALSE TRUEII.7 表格T_NOTICEII.7.1 表格T_NOTICE的列清单名称注释数据类型长度主要的外来键ID 公告编号NUMBER(5) 5 TRUE FALSE TITLE 公告标题VARCHAR2(50) 50 FALSE FALSE CONTENT 公告内容VARCHAR2(2000) 2000 FALSE FALSE PDATE 公告发布时间DATE FALSE FALSE ADMINID 发布公告的管理员编号NUMBER(2) 2 FALSE TRUEII.8 表格T_RESPONSEII.8.1 表格T_RESPONSE的列清单名称注释数据类型长度主要的外来键ID 反馈应答编号NUMBER(5) 5 TRUE FALSE FEEDBACKID 被回复意见的编号NUMBER(5) 5 FALSE TRUE PDATE 回复时间DATE FALSE FALSE TITLE 回复标题VARCHAR2(50) 50 FALSE FALSE CONTENT 回复内容VARCHAR2(2000) 2000 FALSE FALSE ADMINID 回复管理员编号NUMBER(2) 2 FALSE TRUEII.8.1.1表格T_RESPONSE的触发器清单名称注释TRI_UPDATE_FEEDBACK_STATUS 当反馈应答表中插入新的回复之后,将对应的用户意见表中记录的issolved字段置为1,表示已经回复TRI_UPDATE_FEEDBACK_STATUS的文本:CREATE OR REPLACE TRIGGER TRI_UPDATE_FEEDBACK_STATUSafter insert on t_response for each rowdeclare f_status t_feedback.issolved%type;beginselect issolved into f_status from t_feedback where id=:NEW.feedbackid;if(f_status=0)thenupdate t_feedback set issolved=1where id=:NEW.feedbackid;end if;end;/ALTER TRIGGER TRI_UPDATE_FEEDBACK_STATUS ENABLE;II.9 表格T_SCOREII.9.1 表格T_SCORE的列清单名称注释数据类型长度主要的外来键ARTICLEID 帖子编号NUMBER(10) 10 FALSE TRUE PUSER 发帖用户编号NUMBER(5) 5 FALSE TRUE VUSER 评价用户编号NUMBER(5) 5 FALSE TRUE SCORE 评价得分NUMBER(2) 2 FALSE FALSEII.10 表格T_USERII.10.1 表格T_USER的列清单名称注释数据类型长度主要的外来键ID 用户编号NUMBER(5) 5 TRUE FALSE NAME 用户名VARCHAR2(30) 30 FALSE FALSE EMAIL Email VARCHAR2(50) 50 FALSE FALSE PASSWORD 密码VARCHAR2(30) 30 FALSE FALSE REGTIME 注册时间DATE FALSE FALSE ADDRESS 来自何地VARCHAR2(100) 100 FALSE FALSE QQ QQ号VARCHAR2(20) 20 FALSE FALSE PROFESSION 职业VARCHAR2(20) 20 FALSE FALSESIGNATURE 签名,将会显示在该用户发表的帖子内容的下方VARCHAR2(100) 100 FALSE FALSEAVATARID 头像编号NUMBER(3) 3 FALSE TRUEUSABLE 是否可用,1表示可用,0表示不可用NUMBER(1) 1 FALSE FALSEIII 序列清单名称注释S_ADMIN 管理员表中id字段的引用值S_ARTICLE 帖子表中id字段的引用值S_CATEGORY 论坛分类表中id字段的引用值S_FEEDBACK 用户意见表中id字段的引用值S_FORUM 论坛版块表中id字段的引用值S_NOTICE 公告表中id字段的引用值S_RESPONSE 反馈应答表中id字段的引用值S_USER 用户表中id字段的引用值III.1 序列S_ADMIN的文本CREATE SEQUENCE S_ADMINNOMAXVALUEINCREMENT BY 1START WITH 1NOCACHENOORDERNOCYCLE;III.2 序列S_ARTICLE的文本CREATE SEQUENCE S_ARTICLE NOMAXVALUEINCREMENT BY 1START WITH 1NOCACHENOORDERNOCYCLE;III.3 序列S_CATEGORY的文本CREATE SEQUENCE S_CATEGORY NOMAXVALUEINCREMENT BY 1START WITH 1NOCACHENOORDERNOCYCLE;III.4 序列S_FEEDBACK的文本CREATE SEQUENCE S_FEEDBACK NOMAXVALUEINCREMENT BY 1START WITH 1NOCACHENOORDERNOCYCLE;III.5 序列S_FORUM的文本CREATE SEQUENCE S_FORUMNOMAXVALUEINCREMENT BY 1START WITH 1NOCACHENOORDERNOCYCLE;III.6 序列S_NOTICE的文本CREATE SEQUENCE S_NOTICE NOMAXVALUEINCREMENT BY 1START WITH 1NOCACHENOORDERNOCYCLE;III.7 序列S_RESPONSE的文本CREATE SEQUENCE S_RESPONSENOMAXVALUEINCREMENT BY 1START WITH 1NOCACHENOORDERNOCYCLE;III.8 序列S_USER的文本CREATE SEQUENCE S_USERNOMAXVALUEINCREMENT BY 1START WITH 1NOCACHENOORDERNOCYCLE;IV 目录清单名称注释D_IMAGES 头像文件存储的路径IV.1 目录P_IMAGES的文本-- Create directorycreate or replace directory D_IMAGESas'C:\avatar';V 存储过程清单名称注释P_IMG_INSERT 存储过程P_IMG_INSERT用来将用户头像(图片)插入到数据库中V.1 存储过程P_IMG_INSERT的文本CREATE OR REPLACE PROCEDURE P_IMG_INSERT( tid t_avatar.id%type, filename varchar2)isf_lob bfile;b_lob blob;begininsert into t_avatar (id, image)values(tid, empty_blob())return image into b_lob;f_lob:=bfilename('D_IMAGES', filename);dbms_lob.fileopen(f_lob, dbms_lob.FILE_READONLY);dbms_lob.loadfromfile(b_lob, f_lob, dbms_lob.getlength(f_lob));dbms_lob.fileclose(f_lob);commit;end;/。
动态网站实例2:BBS论坛系统(作业)
BBS论坛系统一、系统设计本系统包括8个aspx文件:1.login.aspx(系统首页可以登录注册,含子页面文件list.aspx)、2.register.aspx(注册页面)、3.passchg.aspx(密码修改页面)、4.bbs.aspx(论坛页面)、5.bbs_view.aspx(查看文章页面)、6.reply.aspx(回帖页面)、7.newbs.aspx(发布帖子页面)二、数据库设计,库名bbs,其中包括三个表:UserInfo、Content和Reply本动态网站用到了三个数据表如下:userinfo: userid int 4 X (自动产生用户号)username char 10 √(用户名)pass char 10 √(密码)QQ char 10 √(QQ号码)email char 50 √(Email)heading varchar 50 √(用户图象文件)content: ID int 4 X (自动产生)subject char 50 √(发表的文章的标题)content varchar 400 √(发表的文章的内容)hitnum int 4 √(该文章的点击次数,初始为0)subdate datetime 8 √(发表的文章的时间)heading varchar 50 √(发表的文章的作者头像, 来自于useinfo.heading)subname char 10 √(发表文章的作者用户名, 来自于ername)reply char 50 √(可选字段,没有用)reply: subject char 50 √(发表文章的标题, 来自于content.subject)replydate datetime 8 √(回复时间)content char 400 √(回复内容)subname char 10 √(回复者的用户名)reid int 4 √(原发表文章的ID, 来自于content.ID)三、文件web.config以及数据库的连接四、所有页面头尾的设计。
BBS论坛数据库设计
BBS论坛数据库设计BBS论坛数据库设计一、需求分析BBS论坛是一个WEB系统,可以为大家提供一个交流、互动的平台。
经过分析,BBS论坛需要实现以下功能:(1)用户注册和登录,后台数据库需要存放用户的注册信息和在线状态信息;(2)用户发贴,后台数据库需要存放贴子相关信息,如贴子内容、标题等;(3)浏览、查找帖子,数据库需要实现查看和查找的功能。
(4)论坛版块管理,后台数据库需要存放各个版块信息,如版主、版块名称、贴子数等。
二、系统设计根据BBS论坛的功能,设计的基本实体有BBSUser(用户)、BBSTopic(主贴)、BBSReply(回贴)、BBSSection(版块)、。
1、每个实体具有的属性(1)用户:用户昵称,密码,电子邮件,生日,性别,用户头像,用户等级,用户备注,注册日期,用户状态,用户积分,是否版主。
(2)主贴:所属版块,发贴人,发贴表情,回复数量,标题,正文,发贴时间,点击数,状态,最后回复的用户,最后回复时间。
(3)回贴:回复主贴ID,所在版块ID,回贴人ID,回贴表情,回复内容,回贴时间。
(4)版块:版块ID,版块名称,版主,版块主题,本版格言,点击率,发贴数。
2、各对象间的关系(1)跟贴和主贴有主从关系:我们需要在跟贴对象中表明它是谁的跟贴。
(2)版块和用户有关系:从用户对象中可以根据版块对象查出对应的版主用户的情况。
(3)主贴和版块有主从关系:需要表明发贴是属于哪个版块的。
(4)跟贴和版块有主从关系:需要表明跟贴是属于哪个版块的。
3、E-R图4、将E-R图转换为表(1)将各实体转换为对应的表,将各属性转换为各表对应的列。
(2)标识每个表的主键列。
(3)在表之间建立主外键,体现实体之间的映射关系。
三、数据库实施1、创建表(1)BBSUser(用户)表CREATE TABLE BBSUser(UID INT NOT NULL PRIMARY KEY,UName VARCHAR(10) NOT NULL UNIQUE, UPassword V ARCHAR(20) NOT NULL,UEmail VARCHAR(20) NOT NULL,UBirthday VARCHAR(20),USex INT NOT NULL ,UHead V ARCHAR(20) ,UStatement VARCHAR(20) ,URegDate DATEMENT NOT NULL,UState INT ,UPoint INT,UIsSectioner INT)(2)BBSSession(版块表)CREATE TABLE BBSSession(SID INT NOT NULL PRIMARY KEY,SName VARCHAR(10) NOT NULL UNIQUE, SMasterID INT NOT NULL,SProfile V ARCHAR(10) ,SStatement VARCHAR(10) ,STopicCount INT ,SClickCoount INT ,FOREIGN KEY SMasterID REFRENCES BBSUser(UID))(3)BBSTopic(主贴表)CREATE TABLE BBSTopic (TID INT NOT NULL PRIMARY KEY,TSID INT NOT NULL ,TUID INT NOT NULL ,TReplyCount INT,TEmotion V ARCHAR(10),TTopic V ARCHAR(10) NOT NULL,TContents V ARCHAR(10) NOT NULL,TTime DATETIME NOT NULL,TClickCoount INT,TFlag INT ,TLastReplyUseID ,TLastReplayTime DATETIME,FOREIGN KEY TSID REFRENCES BBSSession (SID) FOREIGN KEY TUID REFRENCES BBSUser(UID) FOREIGN KEY TLastReplyUseID REFRENCES BBSUser(UID) )(4)BBSReply(跟贴表)CREATE TABLE BBSReply (RID INT NOT NULL ,RTID INT NOT NULL ,RSID INT NOT NULL ,RUID V ARCHAR(10) NOT NULL,TEmotion V ARCHAR(10),RContent V ARCHAR(10) NOT NULL,Rtime DATETIME NOT NULL,FOREIGN KEY RTID REFRENCES BBST opic(TID) FOREIGN KEY RSID REFRENCES BBSSession (SID) FOREIGN KEY RUID REFRENCES BBSUser(UID) )。
bbs数据库设计与实现 心得总结
bbs数据库设计与实现心得总结一、概述在当今互联网时代,BBS(Bulletin Board System)作为一种上线论坛系统,已经成为人们日常生活中不可或缺的一部分。
而BBS的数据库设计与实现是构建一个稳定、高效的BBS系统的关键步骤。
二、需求分析1. 用户需求1.1 用户登入与注册1.2 发表帖子与回复帖子1.3 查看帖子与回复1.4 个人中心管理2. 系统需求2.1 全球信息站稳定性2.2 数据库安全性2.3 数据查询效率2.4 系统可扩展性三、数据库设计1. 实体关系图设计在设计数据库时,首先要明确各个实体之间的关系,包括用户、帖子、回复等。
2. 数据表设计2.1 用户表用户ID、用户名、密码、注册时间、最后登入时间等字段2.2 帖子表帖子ID、用户ID、标题、内容、发表时间、浏览量等字段 2.3 回复表回复ID、帖子ID、用户ID、回复内容、回复时间等字段2.4 其他相关表如板块表、权限表等四、数据库优化1. 索引设计通过在常用查询字段上建立索引,可以提高数据的查询效率。
2. 分库分表当数据量大时,可以考虑对数据库进行分库分表,以减轻单个数据库的压力。
3. 数据备份与恢复定期对数据库进行备份,并确保数据的安全性和完整性。
五、数据库实现1. 选择合适的数据库类型根据实际情况选择合适的数据库类型,如MySQL、Redis等。
2. 数据库连接池使用连接池可以提高系统的稳定性和响应速度。
3. 数据库的安全设置限制用户对数据库的访问权限、加密重要数据等操作可以保障数据库的安全性。
六、心得体会在进行BBS数据库设计与实现的过程中,我深刻体会到数据库设计的重要性。
合理的数据库结构能够提高系统的稳定性和效率,提升用户体验。
数据库的优化和实现也是至关重要的,数据的安全性和完整性是保障系统稳定运行的基础。
七、结语BBS数据库设计与实现是一个复杂而又重要的工作,只有在合理的需求分析、数据库设计和数据库实现的基础上,才能构建一个稳定、高效的BBS系统。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
武汉理工大学华夏学院课程设计报告书课程名称:数据库原理与应用题目:BBS论坛数据库设计开发系名:信息工程系专业班级:计网2093班姓名:王博学号: 10225509314指导教师:刘春燕2011 年 7 月 1 日课程设计任务书学生姓名:王博专业班级:计网2093指导教师:刘春燕工作单位:信息工程系设计题目:BBS论坛数据库设计开发要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1.创建数据库 BBS,数据表,并建立主外键、约束、建立表测试数据;2.创建视图3.实现以下功能:(1)简单查询;(2)连接查询;(3)嵌套查询;(4)创建触发器;(5)创建存储过程;+设计报告撰写格式要求:1、明确课程设计的目的和重要性,认真领会课程设计的题目,读懂课程设计指导书的要求,学会设计的基本方法与步骤,学会如何运用前修知识与收集、归纳相关资料解决具体问题的方法。
严格要求自己,要独立思考,按时、独立完成课程设计任务。
2、设计报告:要求层次清楚、整洁规范、不得相互抄袭,凡正文内容有整段完全相同者一律以抄袭论处。
设计报告正文字数不少于0.2万字(不包括附录)时间安排:消化资料、系统调查 1天系统分析、总体设计,实施计划、撰写报告3天演示、验收 1天指导教师签字:2011年7 月 1 日系主任签字:2011 年7 月 1 日课程设计报告书第一章需求分析1.1 BBS的功能与应用需求1.1.1BBS的功能论坛又名BBS,全称为Bulletin Board System(电子公告板)或者Bulletin Board Service(公告板服务)。
它是Internet上的一种电子信息服务系统。
它提供一块公共电子白板,每个用户都可以在上面书写,可发布信息或提出看法。
它是一种交互性强,内容丰富而即使的电子信息服务系统。
用户在BBS站点上可以获得各种信息服务、发布信息、进行讨论、聊天等等。
像日常生活中的黑板报一样,论坛按不同的主题分为许多版块,版面的设立依据是大多数拥护的要求和喜好,用户可以阅读别人关于某个主题的看法,也可以将自己的想法毫无保留地帖到论坛中。
随着计算机网络技术的不断发展,BBS论坛的功能越来越强大,目前BBS的主要功能有以下几点:(1) 供用户自我选择阅读若干感兴趣的专业组和讨论组内的信息。
(2) 可随意检查是否有新消息发布并选择阅读。
(3) 用户可在站点内发布消息或文章供他人查阅。
(4) 用户可就站点内其他人的消息或文章进行评论。
(5) 同一站点内的用户互通电子邮件, 设定好友名单1.1.2应用需求现实生活中的交流存在时间和空间上的局限性,交流人群范围的狭小,以及间断的交流,不能保证信息的准确性和可取性。
因此,用户需要通过网上论坛也就是BBS的交流扩大交流面,同时可以从多方面获得自己的及时需求。
同时信息时代迫切要求信息传播速度加快,局部范围的信息交流只会减缓前进的步伐。
BBS系统的开发能为分散于五湖四海的人提供一个提供一个共同交流、学习、倾吐心声的平台,实现来自不同地方用户的极强的信息互动性,用户在获得自己所需要的信息的同时也可以广交朋友拓展自己的视野和扩大自己的社交面。
1.2需求设计根据BBS的功能与应用需求的简要介绍,可以得出设计BBS系统所要的基本实体有BBSUser(用户)、BBSSection(版块)、BBSTopic(主贴)、BBSReply(回复贴)。
1.3数据字典表1-3-1BBSUsers 用户信息表表1-3-2BBSTopic主贴信息表格表1-3-3BBSSection板块信息表1-3-4BBSReply回帖信息表第二章概要设计2.1基本概念介绍⑴实体:现实世界中的各种事物的抽象。
实体可以是具体的各种事物,如学生、教师、仓库、图书馆等;也可以是抽象的概念,如课程、部门、学校等。
⑵联系:两个实体集之间的联系。
可以分为三类:①一对一联系(1:1)如果对于实体集A中的每一个实体,实体集B中最多有一个实体与之联系,反之亦然,则称实体集A和实体集B具有一对一联系,记作1:1。
②一对多联系(1:n)如果对于实体集A中的每一个实体,实体集B中最多有n(n≧1)个实体与之联系,对于实体集B中的每一个实体,实体集A中最多有一个实体与之联系,则称实体集A和实体集B 具有一对多联系,记作1:n。
③多对多联系(m:n)如果对于实体集A中的每一个实体,实体集B中最多有n(n≧1)个实体与之联系,对于实体集B中的每一个实体,实体A中最多有m(m≧1)个实体与之联系,则称实体集A和实体集B具有多对多联系,记作m:n。
⑶属性:描述实体特征或性质。
如学生实体的属性有:学号、姓名、性别、年龄等。
课程实体的属性有:课程号、课程名、学分等。
2.2实体E-R图2.2.1用户E-R图2.2.2主贴E-R图2.2.3版块E-R图2.2.4回帖E-R图2.3实体总体E-R图3.2实体联系图第三章详细设计3.1程序设计3.1.1创建数据库create database BBSon primary(name = BBS_data, --逻辑名filename ='d:\BBS_data.mdf', --物理文件size = 20MB, --初始大小filegrowth=10%, --文件增长率maxsize = 200MB --初始大小)log on(name =bbs_log, --逻辑名filename ='d:\bbs_data.ldf', --物理文件size =10mb, --初始大小filegrowth = 10%,--文件增长率maxsize = 100MB --最大尺寸)3.1.2创建用户表create table BBSUsers(UID int constraint pk_UID primary key,--用户编号UName char(8) not null, --用户姓名UPassword char(16) constraint df_UPassword default '888888',--用户密码UEmail char(20) not null constraint ck_Uemail check(UEmail like'%@%.%'),--用户Email UBirthday datetime not null,--用户生日Usex int constraint df_Usex default '1', --用户性别UClass int constraint df_UClass default '1', --用户等级UStatement varchar(150)not null, --用户说明URegDate datetime not null default getdate(), --用户注册时间UState tinyint constraint df_UState default '1', --用户状态UPoint int constraint df_UPoint default '20' , --用户积分constraint ck_UPassword check(UPassword like '______'))3.1.3创建版块表create table BBSSection(SID int constraint pk_SID primary key,--版块编号SName char(20),--版块名称SMasterID int, --版主编号SStatement varchar(100), --版块说明SClickCount int constraint df_SClickCount default '0', --版块点击次数STopicCount int constraint df_STopicCount default '0' --版块主题数)3.1.3创建主贴表create table BBSTopic(TID int constraint pk_tid primary key, --主贴编号TSID int not null, --主贴板块编号TUID int not null, --主贴用户编号TReplyCount int not null, --主贴回复次数TEmotion char(10) not null, --主贴表情TTopic varchar(16) not null CONSTRAINT ck_TTopic check(TTopic not like'%''%'), --主贴标题TContents text not null, --主贴内容TTime datetime not null default getdate() ,--发帖时间TClickCount int not null, --主贴点击次数TLastClickT datetime not null ,CONSTRAINT [CK_TLC] CHECK ([TLastClickT]>=TTime) --主贴最后点击时间)3.1.4创建回复贴表create table BBSReply(RID int constraint pk_RID primary key,--回复编号RTID int,--回复帖子编号RSID int,--回复版块编号RUID int,--回复用户编号REmotion char(10),--回复表情RTopic varchar(20),--回帖主题RContents text,--回帖内容RTime datetime default getdate(),--回帖时间RClickCount int,--回帖点击次数)3.1.5创建各表之间的联系--建立联系alter table BBSTopicadd constraint fk1_BBSTopic_BBSUsers foreign key(tuid) references BBSUsers(UID) --一个用户可以发表多篇主帖内容alter table BBSReplyadd constraint fk1_BBSReply_BBSTopic foreign key(RTID) references BBSTopic(TID) --一篇主帖能够对应多条回帖alter table BBSReplyadd constraint fk1_BBSReply_BBSUsers foreign key(RUID) references BBSUsers(UID) --一个用户可以发表多条回帖内容alter table BBSTopicadd constraint fk1_BBSTopic_BBSSection foreign key(TSID) references BBSSection(SID) --一个版块可以包含多篇主帖alter table BBSReplyadd constraint fk1_BBSReply_BBSSection foreign key(RSID) references BBSSection(SID) --一个版块可以包含多篇回帖alter table BBSSectionadd constraint fk1_BBSSection_BBSUsers foreign key(SMasterID) references BBSUsers(UID) --一个用户可以管理多个版块3.1.6插入用户信息(注册新用户)insertintoBBSUsers(UID,UName,UPassword,UEmail,UBirthday,USex,UClass,UStatement,URegDate,USta te)values('1001' ,'无敌游客','159357','auroral@','1991-5-12','1','','疯子','2010-5-7','2')insertintoBBSUsers(UId,UName,UPassword,UEmail,UBirthday,USex,UClass,UStatement,URegDate,UStat e,UPoint)values('1002' ,'熬吧马','654321','shanhu@','1989-8-30','1','','爱吧','2011-4-7','2','25') insertintoBBSUsers(UID,UName,UPassword,UEmail,UBirthday,USex,UClass,UStatement,URegDate,USta te,UPoint)values('1003' ,'真伪遢','158664','cookie@','1992-1-3','2','','快乐','2009-5-7','2','103') insertintoBBSUsers(UID,UName,UPassword,UEmail,UBirthday,USex,UClass,UStatement,URegDate,USta te,UPoint)values('1004' ,'地球字幕','175175','ibook@','1990-7-4','2','','自我','2008-5-4','2','2') insertintoBBSUsers(UID,UName,UPassword,UEmail,UBirthday,USex,UClass,UStatement,URegDate,USta te,UPoint)values('1005' ,'无伤大雅','198755','ipd123@','1988-1-4','1','','和谐','2000-12-12','1','100')insertintoBBSUsers(UID,UName,UPassword,UEmail,UBirthday,USex,UClass,UStatement,URegDate,USta te,UPoint)values('1006' ,'回来吧主','192445','zhenmi@','1994-12-14','2','','低调','2000-12-12','1','97')insertinto BBSSection(SID,SName,SMasterID,SStatement,STopicCount)values('01' ,'灌水区','1006','有什么您就说','5')insertinto BBSSection(SID,SName,SMasterID,SStatement,SClickCount,STopicCount)values('02' ,'魔兽贴吧','1005','请不要放水贴!','4','10')3.1.8发帖insertintoBBSTopic(TID,TSID,TUID,TReplyCount,TEmotion,TTopic,TContents ,TTime,TClickCount,TLa stClickT)values('001' ,'01','1005','5',''-~','无聊来冒个泡的。