贴吧类网站数据库建表自析
2016-04-13 14:21
295 查看
最近想自己做一个贴吧类的网站,就向百度贴吧学习学习吧。
2、未登录时,能看帖,但不能发帖跟回帖
3、登陆后,显示用户相关信息,能发帖跟回帖
4、吧务能对帖子进行管理,也能管理用户
帖子方面:发帖、查帖、回帖、删帖、加精、置顶
用户方面:登陆、注册、管理(禁言)
功能分析:
1、进入主页显示吧中最新的帖子信息2、未登录时,能看帖,但不能发帖跟回帖
3、登陆后,显示用户相关信息,能发帖跟回帖
4、吧务能对帖子进行管理,也能管理用户
帖子方面:发帖、查帖、回帖、删帖、加精、置顶
用户方面:登陆、注册、管理(禁言)
相关类分析:
1、初步分析
User 用户 uid id username 账号 password 密码 name 昵称 icon 头像 email 邮箱 identity 吧中身份 level 等级 privilege 具有的权限 Post 帖子 pid id title 帖子名称 content 内容概述 num 回帖数 owner 楼主(many to one) lastUser 最后回帖人(many to one) ldate 最后回帖时间 floors 帖子所有楼层(one to many) status 帖子状态 Floor 楼层 fid id owner 层主(many to one) content 内容 date 回帖时间 floorNum 是几楼 post 所属帖子(many to one) replies 楼层所有回复(one to many) Reply 回复 rid id owner 回复人(many to one) content 内容 date 回复时间 floor 所属楼层(many to one)
身份:
每个用户的身份都有可能会发生改变,以后也有可能会出现新的身份,所以需要将身份独立作为一个表。
等级:
百度贴吧后台有对等级的称号修改的功能,所以将等级独立作为一个表。
权限:
权限是跟身份挂钩的,等级可能也会有影响,所以将权限从用户中分离出来,通过身份和等级获取。 但是权限本身只有那么几种,以后出现新权限的概率也不大。 因此可以在项目启动时,用PrivilegeFactory类把权限对象写入内存,然后根据身份和等级为用户注入相应的权限。 一个用户也可以拥有多个权限,比如发帖、删帖。可以把权限对应成二进制数
怎么让权限看起来像权限?
思考: 可以将类中的权限交给一个类管理 给用户类注入的不是Privilege而是一个PrivilegeManage。PrivilegeManager是单例的,可以节省内存 public class PrivilegeManager{ private ThreadLocal privilegeTL = new ThreadLocal(); private Map<String,Privilege> getPrivilegeMap(){ return privilegeTL.get(); } public Privilege getPrivilege(String pname){ return getPrivilegeMap().get(pname); } public void setPrivilegeMap(Map<String,Privilege> privilegeMap){ privilegeTL.set(privilegeMap); } } privilegeMap中的结构 { "权限1":AddPostPrivilege, "权限2":DeletePostPrivilege, "权限3":DefaultPrivilege } 权限相关类和接口的设计 public interface Privilege{ boolean isAllow(); } public interface AddPostPrivilege{ private Integer pid; private String pname; public boolean isAllow(){ return true; } //get,set } public interface DefaultPrivilege{ public boolean isAllow(){ return true; } } 到这就差不多设计完成了,但是发现由于Privilege接口实在是太简单,完全可以使用boolean值代替。
状态:
跟身份和等级一样可以独立作为一个表
2、深入分析
修改后的用户: User 用户 uid id username 账号 password 密码 name 昵称 icon 头像 email 邮箱 identity 吧中身份(many to one) level 等级(many to one) privilegeManager 权限管理器 新增: Identity 身份 iid id iname 身份名称(普通用户/会员/吧主) privileges 身份对应的权限 Level 等级 lid id lname 等级对应称号 Priviledge 权限 pid id pname 权限名称 classname 权限对应的类全名,暂时可有可无吧 status 状态 sid id sname 状态名称
将类关系变成表关系
User 类型 user 类型 uid Integer uid int(11) 主键 username String username varchar(255) password String password varchar(255) name String name varchar(255) icon Image icon varchar(255) 保存的是路径 email String email varchar(255) identity Identity iid int(11) 外键 level Level lid int(11) 外键 privilegeManager
Post 类型 post 类型 pid Integer pid int(11) 主键 title String title varchar(255) content String content varchar(255) num Integer num int(11) owner User ouid int(11) 外键 lastUser User luid int(11) 外键 ldate Date ldate datetime status Status sid int(11) 外键 floors
Floor 类型 floor 类型 fid Integer fid int(11) 主键 owner User uid int(11) 外键 content String content varchar(255) date Date date datetime floorNum Integer floorNum int(11) post Post pid int(11) 外键 replies
Reply 类型 reply 类型 rid Integer rid int(11) 主键 owner User uid int(11) 外键 content String content varchar(255) date Date date datetime floor Post fid int(11) 外键
Identity 类型 identity 类型 iid Integer iid int(11) 主键 iname String iname varchar(255) privileges Integer privileges int(11) 交给PrivilegeFactory解析后,将得到的PrivilegeManager注入User中
Level 类型 level 类型 lid Integer lid int(11) 主键 lname String lname varchar(255)
Privilege 类型 privilege 类型 pid Integer pid int(11) 主键 pname String pname varchar(255) classname String classname varchar(255)
Status 类型 status 类型 sid Integer sid int(11) 主键 sname String sname varchar(255)
相关文章推荐
- 推荐一个压缩图片,但是品质影响不大的网站(二)之原理探索
- spark架构及其工作机制
- JavaScript判断移动端及pc端访问不同的网站
- Scrapy实战之抓取ajax网站
- 决定网站命脉的SEO核心关键词选取
- 运营地方旅游网站是否还有生存空间?
- keepalived实现高可用集群方案
- 首席架构师徐海峰眼中的架构和出色的架构师
- 用 javascript 脚本,网站判读来访者是手机还是电脑
- java电子书很好的下载网站收藏
- MVP架构
- Linux kernel内核架构的理解
- Windows 2008 开启80端口实现外网访问网站
- 架构设计-网关服务器
- 九、搭建织梦cms网站
- Android官方MVP架构示例项目解析
- 【SDCC讲师专访】首席架构师徐海峰眼中的架构和出色的架构师
- 10款WordPress的插件让你的网站的移动体验
- java集合框架02——Collection架构与源码分析
- 程序架构的优化和设计,架构师必须悟透的事情