自己动手写BBS作为自己学习了一个多月的jsp基础的一个练习吧。算是一个比较完整的Jsp网站了。
本文介绍这个简单BBS的数据库设计部分。
考虑到一个最简单的BBS系统需要的几个实体分别是版块、主题(帖子)、主题回复和用户。
主要逻辑关系是
1.帖子属于版块中
2.回复属于一个帖子
3.用户发布帖子和回复
4.用户对版块,帖子和回复进行管理(按权限)
5.用户对用户进行管理(按权限)
因此设计基本的数据库E-R图如下
最后确定表数量
用户表user
帖子表post
回帖表sub_post
版块表block
帖子回复关系表
版块帖子关系表
版块用户关系表
修改
在实际设计中修改了表post 添加了属性 last_mod_time 表示此帖子最后修改的时间,从而确定帖子按修改时间从近到久的排列顺序。
也可以使用查询最后一条回帖记录的回帖时间来确定排序,但考虑到查询比较复杂耗时,性价比不高,故采用添加一个属性的方法。
讨论
关于数据库设计的一些讨论:
数据库设计是否一定要满足数据库范式才是最好的呢?
我发现,当数据库实体间的关系为1:1或者1:N时,不让一定满足了三范式的数据库设计方案才是最好的。相反这种设计还可能产生冗余数据。
例如本系统中的数据库
帖子表(帖子id,帖子信息)
回帖表(回帖id,回帖信息)
帖子回帖关系表(帖子id,回帖id)
帖子和回帖是1:N的关系,此时,如果我们将回帖表改成(回帖id,回帖信息,帖子id),我们可以认为回帖信息和对回帖id存在部分函数依赖,即这样的设计是不满足2NF的。也就是说我们将本应该分开的两个关系(回帖、帖子回帖)合并到了一起,但是正是这种合并减少了一部分冗余,并且不会导致删除、插入异常。同时简化了查询。
因此当数据库中存在这种1:N或1:1关系时可以考虑这样的设计方式。虽然不一定满足数据库设计范式,但是却是一个更合理的设计方法
转载于:https://blog.51cto.com/upupxjg/624629