贴吧类网站数据库建表自析

来源:互联网 发布:网络直播平台 论文 编辑:程序博客网 时间:2024/06/01 09:06

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

功能分析:

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类把权限对象写入内存,然后根据身份和等级为用户注入相应的权限。一个用户也可以拥有多个权限,比如发帖、删帖。可以把权限对应成二进制数

2进制

怎么让权限看起来像权限?
思考:可以将类中的权限交给一个类管理给用户类注入的不是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)
0 0
原创粉丝点击