[原创]mBBS ver 2.0发布,源码提供下载(附论坛设计思路)
mBBS ver 2.0.04.12.06 sql版
主要特点:
简洁!
vBulletin界面风格
存储过程分页
二级分类
版主、版副权限分开
支持UBB
不支持所见即所得发帖
脏字过滤
版主、版副在线管理
置顶、总置顶
精华区
删除最后一个回贴后主贴排序恢复原来的顺序(其他论坛有这个功能否?)
用户管理使用接口,可以将任何用户数据库导入!!
数据一致性用触发器实现
...
演示地址:http://madpolice.vicp.net/bbs/
部分源码在上面的地址中贴出来了
*************************************************************************************************
mBBS设计思路概述
*************************************************************************************************
一、分类
没有支持无级分类,只要是考虑到二级分类比较常见。而且论坛分类级别过多别人不一定愿意看。
二、结构
论坛由若干“讨论区”(Categories)组成,每个“讨论区”由若干“讨论版”(Forums)组成,每个“讨论版”由若干“贴子”(Articles)组成。
“贴子”(Articles)分为“主贴”(Root Articles)与“回贴”(Sub Articles)两种。每个“回贴”都与一个唯一的“主贴”相关联。
三、数据库表设计
表名:cate 大类
----------------------------------------
字段 含义
----------------------------------------
c_id 自动编号,主键
c_name 大类名
----------------------------------------
表名:forum 小类
----------------------------------------
字段 含义
----------------------------------------
c_id 所属大类编号,外键(对应cate表中的c_id)
f_id 自动编号,主键
f_name 小类名
----------------------------------------
表名:article 帖子
----------------------------------------
字段 含义
----------------------------------------
f_id ,所属小类编号,外键(对应forum表中的f_id)
a_id 自动编号,主键
a_title 帖子主题
a_content 帖子内容
a_topType 置顶类型(2总置顶,1本版置顶,0不置顶)(主贴列表的第一排序依据)
u_id 作者id,外键,(对应user表中的u_id)
a_r_id 帖子所关联的主贴编号
a_s_id 排序编号,(主贴列表的第二排序依据)
a_r_s_id “贴子”所关联的“主贴”的排序编号
----------------------------------------
说明:
a_r_id article root id
如果是主贴,该值设为0;如果是回贴,该值为所关联的主贴的a_id
a_s_id article sorting id
如果是“回贴”则该值设为0,即“回贴”不在“主贴列表”中排序
如果是没有回复的“主贴”则该值等于a_id
如果是有回复的“主贴”则该值等于最后回复的“回贴”a_id
a_r_s_id aritcle root sorting id
如果是“主贴”,则该值设为0;如果是“回贴”,则该值等于“主贴”a_s_id
表名:user 用户表
----------------------------------------
字段 含义
----------------------------------------
u_id 自动编号,主键
u_name 用户名
----------------------------------------
四、数据库视图设计
视图名:vforum 供论坛首页调用
select f.*,c.c_name from forum f inner join cate c on f.c_id=c.cid order by c_id,f_id
视图名:vArticle
将上面四个表的数据根据它们之间的关系组合到一起
五、数据库存储过程设计
存储过程名:pForumPaging
用途:通过传入参数“小类编号”查询vArticle视图,返回某小类主贴列表的分页记录集
存储过程名:pArticlePaging
用途:通过传入参数“主贴编号”查询vArticle视图,返回某主贴及其相关回贴的分页记录集
六、页面设计
论坛首页index.asp 直接查询vForm视图生成
小类主贴列表forum.asp 调用pForumPaging存储过程生成
帖子显示article.asp 调用pArticlePaging存储过程生成
七、关于主贴的排序编号
主贴跟所有回帖组成了一个“链”。
每个帖子都有“主贴排序编号”跟“自己的编号”;每个所保存的“主贴排序编号”实际上就是“链”中“上一个帖子的编号”。
因此,每个帖子都保存着“上一个帖子的编号”跟“自己的编号”。
因此,整个“链”可以看成是这样一种数据结构——“链表”(关于“链表”这种数据结构就不解释了)!!
那么,发主贴就是新增加一条“链”;发回贴就是在主贴“链”上增加一个“链节”。
那么,删除主贴实际上就是删除一条“链”;删除回贴就是删掉主贴“链”上的一个“链节”;
如果这个“链节”是“链”的尾部,那么删除这个“链节”会改变主贴排序编号,也就是让主贴的排列顺序恢复到没有发这个回贴之前的顺序;
如果这个“链节”在“链”的中部,那么删除这个“链节”只要让断链接上就可以了,也就是说不改变主贴排列顺序。具体操作见下,
八、删除帖子的实现(使用触发器)
1.删除主贴
删除该主贴以及该主贴的所有回帖
2.删除回贴
如果是最后一个回贴,
a.设置相关联的主贴的“排序编号”为自己保存的“主贴排序编号”,
b.删除该回贴
如果不是最后一个回贴,
a.找到“主贴排序编号”等于自己“编号”的帖子(也就是“链表”中的下一个“链节”),设置下一个“链节”的“主贴排序编号”为自己保存的“主贴排序编号”;
b.删除该回贴