![729f4ee0969de8e192c7d19fe9494004.png](https://i-blog.csdnimg.cn/blog_migrate/d78daa3d58293db8c285fde46891b863.jpeg)
1.前言
上一篇文章介绍了如何利用SpringBoot搭建后端框架:Alex Wang:全栈开发踩坑之路2-后端架构搭建,本文介绍如何设计系统中MySql数据库的架构。
本后端项目的地址(撰写中):apkkids/mymis_end
2.设计原则
直接参考《阿里巴巴Java开发手册》中关于Mysql规约的部分,https://juejin.im/entry/589c173b8d6d81006c7e9f70。
3.数据库设计
依据Alex Wang:全栈开发踩坑之路1-技术架构文中的系统需求,可以将系统中的表分为三类:
- 用来进行系统管理和权限控制的系统表(后缀为sys),包括role_sys(角色),resource_sys(资源),admin_sys(管理员),role_resource(角色资源关联表),admin_role(管理员角色管理表);
- 字典表(后缀为dic):nation_dic(国家)、position_dic(职位)、joblevel_dic(职级)、pliticstatus_dic(政治身份);
- 数据表(没有后缀):employee(职员)、组织(organization)、salary(工资)
其中字典表和数据表没有什么特殊性,主要考虑系统表的设计:
- 资源:资源代表系统中可以访问和操作的数据,而系统中的数据是由某个URL指向的页面来展示的,因为本系统是一个Single Page Application,因此某个URL就可以代表某个资源。例如/sys/admin这个URL可以指向某个页面,这个页面上就可以操作管理员这种数据,所以/sys/admin就代表管理员资源。
- 角色:角色是一组资源的集合,例如某个角色拥有三个资源,拥有这个角色的管理员就可以访问这三个页面,从而操作这三种资源;
- 管理员:管理员是角色的拥有者,每个管理员可以拥有0至n个角色,而每个角色可以拥有0至n个资源;
- 关联表:角色和资源是多对多关系,所以建立一个角色资源关联表,其中两个外键分别指向角色表和资源表;同样,管理员和角色也是多对多关系,所以建立管理员角色关联表,其中两个外键分别指向管理员表和角色表。
- 外键:外键主要是两种,一种是指向字典表id,另一种则是关联表中的指向参与关联的表的id。
最终的数据库设计如下图所示,当然这是一个早期版本,后面会继续调整:
![514e37435502b0df40cd907736fef30a.png](https://i-blog.csdnimg.cn/blog_migrate/6dd221eb7b8de98b3f624a36bc3df3e0.jpeg)
4.建表代码
可使用各类MySql工具创建数据库表,并输入初始数据,我用的是Navicat for Mysql,如下图所示:
![5283c15468022467b98d5b97c5632790.png](https://i-blog.csdnimg.cn/blog_migrate/c84abda5f5714814e58db3ffc1c90794.jpeg)
当然,如果习惯的话,使用IntelliJ自带的数据库插件也非常方便:
![ff047165ce411e95e735d7cdb3439d45.png](https://i-blog.csdnimg.cn/blog_migrate/254335c6bf3878bc38a593b3cf8b9d24.jpeg)
建表语句在git项目中的mymis.sql文件中:https://github.com/apkkids/mymis_end/blob/master/mymis.sql。连接你的Mysql服务器,直接执行即可。
5.下一步工作
至此Mysql数据库就初步设计完成,下一步工作是导入并编写Mybatis相关配置文件和代码,并测试数据库操作。
6.学习资料
廖雪峰的教程:SQL教程