贴吧类网站数据库建表自析
Posted xiedacon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了贴吧类网站数据库建表自析相关的知识,希望对你有一定的参考价值。
最近想自己做一个贴吧类的网站,就向百度贴吧学习学习吧。
功能分析:
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)
以上是关于贴吧类网站数据库建表自析的主要内容,如果未能解决你的问题,请参考以下文章
mysql数据库cmd命令窗建表时有时候出错按回车一直换行不执行,也不报错,无法退出,如何解决?