首页 > 编程知识 正文

百度贴吧数据库表设计

时间:2023-05-03 12:24:15 阅读:287072 作者:1490

最近想自己做一个贴吧类的网站,就向百度贴吧学习学习吧。

功能分析:

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 datetimestatus 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 datetimefloorNum 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 datetimefloor 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)

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。