一、回顾
在前面的30篇文章中介绍了基于SpringBoot架构的基础开发,包括多模块项目结构搭建、Swagger+Knife4j 项目接口文档生成工具、SpringBoot连接数据库、Alibaba Druid连接池、整合Redis、接口响应包通用类、Thymeleaf、Freemarker 页面模版引擎的整合、自定义错误页、全局异常处理、在项目中引入mybatis-plus、Spring Security安全框架、JWT、Oauth2 Server端和客户端的开发、常用工具类开发、定时器开发、RabbitMQ消息中间件、JAVA Mail发送邮件、国际化开发、Beetl框架的开发及Beetl国际化的实现等等。这些技术已经被整合到我们的基础架构里,接下来我们开始进行真正的项目开发,首先我们开始设计项目的数据库。
项目数据库采用OpenJWeb快速开发平台的数据库。OpenJWeb快速开发平台开发于2009年,后面在实际项目中开发了B2C、CMS、在线培训等子系统,虽然OpenJWeb使用的SSH框架,但是数据库是可以完全服用的,特别是用户、角色、权限管理,在设计的时候就完全符合RBAC角色权限模型,而且完全适用于Spring Security,并支持多租户模式的应用场景。
二、数据库设计之子系统划分
OpenJWeb的数据库设计,主要包括系统管理、快速开发(现在流行低代码的称呼)、CMS内容管理、B2C电商平台、在线培训、在线招聘等。
其中系统管理子系统的数据库表结构以comm_作为前缀,电商以b2c_作为前缀,CMS以cms_作为前缀,在线招聘以hr_作为前缀。
三、数据库结构设计及DDL下载
数据库表结构的DDL脚本在主工程的sql目录下的db-mysql.sql,大家可以在github上下载完整项目,github地址:GitHub - openjweb/cloud at masterOpenJWeb is a java bases low code platform. Contribute to openjweb/cloud development by creating an account on GitHub.https://github.com/openjweb/cloud/tree/master
另外我把这个SQL文件上传到资源库,仅需1个积分就可下载。如果不想消费1积分的话可以在Github上下载项目。这个数据库有大约500个左右的数据库表,如果做项目开发的话,可以节省大量的数据库设计的时间。CSDN中点下面的链接可下载数据库表结构DDL文件:
https://download.csdn.net/download/baozhengw/90104728https://download.csdn.net/download/baozhengw/90104728
四、数据库表结构清单
openjweb平台将表名、表字段名分别放在了comm_table_def和comm_column_def中了,下面是从comm_table_def中查到的表结构清单:
内容管理 | 博客日志表 | cms_blog |
内容管理 | 博客基本信息表 | cms_blog_info |
内容管理 | 网站栏目基本信息 | cms_category |
内容管理 | 栏目新闻订阅表 | cms_cate_subscribe |
当前Web应用 | 网站栏目-信息关系 | cms_cat_inf_rel |
内容管理 | 信息表 | cms_info |
内容管理 | 信息分页存储 | cms_info_page |
内容管理 | 关键词表 | cms_keywords |
内容管理 | 错敏词分析统计表 | cms_mis_json_result |
内容管理 | 错敏词扫描明细表 | cms_mis_scan_detail |
内容管理 | 错敏词扫描计划表 | cms_mis_scan_plan |
内容管理 | 错敏词库管理 | cms_mis_words |
内容管理 | 网站视频 | cms_video |
内容管理 | 信息访问日志 | cms_visit_log |
内容管理 | 专题信息表 | cms_zhuanti |
内容管理 | 专题插件设置表 | cms_zhuanti_portlet |
内容管理 | 专题模板表 | cms_zhuanti_templ |
基础平台 | 相册表 | comm_album |
基础平台 | API_KEY管理 | comm_api_key |
基础平台 | 应用申请表 | comm_app_apply |
基础平台 | 应用功能明细 | comm_app_fun_list |
基础平台 | 微应用邀请码表 | comm_app_invite_code |
基础平台 | 微应用邀请码明细表 | comm_app_recommend |
基础平台 | 注入攻击日志 | comm_attack_log |
基础平台 | 权限基本信息表 | comm_auth |
基础平台 | 条码种类管理 | comm_barcode_cls |
基础平台 | 单据号生成配置 | comm_bill_rules |
基础平台 | 单据流水号记录 | comm_bill_rules_detail |
基础平台 | 网络攻击IP表 | comm_blocks_ip |
基础平台 | BUG记录 | comm_bug_log |
基础平台 | 通用按钮定义表 | comm_buttons |
基础平台 | 表字段基本信息表 | comm_column_def |
基础平台 | 公司基本信息 | comm_company |
基础平台 | 单位权限管理 | comm_com_auth |
基础平台 | 企业资金余额表 | comm_com_balance |
基础平台 | 单位信息发布表 | comm_com_cms |
基础平台 | 数据字典(按单位) | comm_com_dict |
基础平台 | 单位会员表 | comm_com_member |
基础平台 | 单位参数设置表 | comm_com_parm |
基础平台 | 企业商户充值表 | comm_com_recharge |
基础平台 | 个人通讯录 | comm_contact_person |
基础平台 | 评论表 | comm_criticize |
基础平台 | 通用日报表 | comm_daily_report |
基础平台 | 每日签到表 | comm_daily_sign |
基础平台 | 数据权限定义表 | comm_data_auth |
基础平台 | 数据权限编码表 | comm_data_auth_code |
基础平台 | 角色数据权限表 | comm_data_auth_role |
基础平台 | 用户别数据权限表 | comm_data_auth_user |
基础平台 | 数据扩展表 | comm_data_ext |
基础平台 | 数据源定义 | comm_data_source |
基础平台 | 删除记录约束表 | comm_del_constraint |
基础平台 | 部门基本信息 | comm_dept |
基础平台 | 部门权限关系表 | comm_dept_auth |
基础平台 | 机构设备设施清单 | comm_dept_equ |
基础平台 | 部门领导任职记录表 | comm_dept_header_exp |
基础平台 | 动态表单定义表 | comm_dform_def |
基础平台 | 动态表单定义明细表 | comm_dform_def_detail |
基础平台 | 数据字典基本信息 | comm_dict |
基础平台 | 数据字典类型 | comm_dict_type |
基础平台 | 脏数据管理 | comm_dirty_data_manager |
基础平台 | 行政区划 | comm_division |
基础平台 | 编辑页字段定义 | comm_editpage_def |
基础平台 | 个人邮件群组 | comm_email_groups |
基础平台 | 企业员工档案 | comm_employee |
基础平台 | 异常日志表 | comm_exception_log |
基础平台 | 快递公司列表 | comm_express_com |
基础平台 | 字段校验器 | comm_field_validator |
基础平台 | 字段-校验器关系表 | comm_field_validator_rel |
基础平台 | 敏感词表 | comm_filter_words |
基础平台 | 会计期 | comm_fin_period |
基础平台 | 页面按钮定义表 | comm_form_buttons |
基础平台 | 功能定义 | comm_function |
基础平台 | 代码生成策略设置 | comm_gencode_conf |
基础平台 | 日志历史表 | comm_hist_logs |
基础平台 | 行业编码 | comm_industry |
基础平台 | 注入攻击字典表 | comm_inject |
基础平台 | IP地址解析表 | comm_ip_table |
基础平台 | JMS消息表 | comm_jms_log |
基础平台 | JSON数据字典 | comm_json_data |
基础平台 | 多语词库 | comm_lang_words |
基础平台 | 列表页字段定义 | comm_listpage_def |
基础平台 | 站内短信 | comm_localsite_sm |
基础平台 | 数据约束关系表 | comm_logic_constraints |
基础平台 | 用户登录日志 | comm_login_log |
基础平台 | 登录界面样式管理 | comm_login_ui |
基础平台 | 系统日志表 | comm_logs |
基础平台 | 全文检索处理队列 | comm_lucene_queue |
基础平台 | 个人邮箱列表 | comm_mail_list |
基础平台 | 主明细表关系表 | comm_master_detail_rel |
基础平台 | 消息表 | comm_message |
基础平台 | 微应用表 | comm_micro_app |
基础平台 | 手机网页图标配置 | comm_mobile_icon |
基础平台 | 应用方案表 | comm_myapp_module |
基础平台 | 用户自定义应用 | comm_my_app |
基础平台 | 个人银行账号管理 | comm_my_bank_card |
基础平台 | 软件操作手册模板 | comm_my_word_template |
基础平台 | 网上银行参数配置 | comm_netbank_config |
基础平台 | 在线客服管理 | comm_online_consult |
基础平台 | 组织结构人员关系 | comm_org_emp_rel |
基础平台 | 时段设置表 | comm_period_set |
基础平台 | 弹出式窗口定义 | comm_popup |
基础平台 | Portlet设置表 | comm_portlet_info |
基础平台 | 产品序列号管理表 | comm_product_ctrl |
基础平台 | 机构/人员工作单位 | comm_psn_company |
基础平台 | 作品表 | comm_psn_works |
基础平台 | 查询模板 | comm_query_template |
基础平台 | 分享营销推荐关系表 | comm_rcmd_relate |
基础平台 | 授权下载数控制 | comm_record_download_ctrl |
基础平台 | 通用数据关系表 | comm_record_rel |
基础平台 | 表记录或表字段序列号管理 | comm_record_serial |
基础平台 | 报表定义 | comm_report_def |
基础平台 | 表单按钮设置 | comm_rep_button_def |
基础平台 | 报表表单定义 | comm_rep_form_def |
基础平台 | 动态报表查询条件设置 | comm_rep_query |
基础平台 | 表单标签页设置 | comm_rep_tabs |
基础平台 | 角色基本信息 | comm_roles |
基础平台 | 角色权限关系表 | comm_role_auth |
基础平台 | 角色审批表 | comm_role_check |
基础平台 | 实时分润结算费率表 | comm_settle_rate |
基础平台 | 长短链接转换 | comm_short_url |
基础平台 | 专家(艺术家)管理 | comm_specialist |
基础平台 | 专家分类 | comm_specialist_cls |
基础平台 | 单点登录账号管理 | comm_sso_account |
大数据中台 | comm_sso_api | comm_sso_api |
大数据中台 | comm_sso_api_rel | comm_sso_api_rel |
大数据中台 | comm_sso_app | comm_sso_app |
大数据中台 | comm_sso_app_rel | comm_sso_app_rel |
基础平台 | 单点登录设置表 | comm_sso_config |
基础平台 | 星座基本信息 | comm_star |
基础平台 | 基础策略设置表 | comm_strategy_cfg |
基础平台 | 子系统基本信息 | comm_sub_system |
基础平台 | 系统邮箱列表 | comm_system_mail |
基础平台 | 系统参数表 | comm_system_parms |
基础平台 | 表基本信息 | comm_table_def |
基础平台 | 标签分类表(HR用) | comm_tags |
基础平台 | 标签明细(HR用) | comm_tag_detail |
基础平台 | 任务主表 | comm_task_head |
基础平台 | 任务处理队列 | comm_task_queue |
基础平台 | 测试其他数据库建表 | comm_test1 |
基础平台 | 第三方登录设置表 | comm_third_login_set |
基础平台 | 树形结构数据字典 | comm_tree_dict |
基础平台 | 后台页面框架管理 | comm_ui_frame |
基础平台 | 后台皮肤样式管理 | comm_ui_skin |
基础平台 | 上传图片管理 | comm_upload_pic |
基础平台 | 用户基本信息 | comm_user |
基础平台 | 用户自定义数据授权 | comm_userdef_data_auth |
基础平台 | 自定义搜索器子表 | comm_userdef_queryd |
基础平台 | 自定义搜索器主表 | comm_userdef_querym |
基础平台 | 用户权限关系表 | comm_user_auth |
基础平台 | 网站用户余额表 | comm_user_balance |
基础平台 | 用户数据字典 | comm_user_dict |
基础平台 | 用户位置管理 | comm_user_location |
基础平台 | 用户自定义模块 | comm_user_module |
基础平台 | 用户自定义表字段 | comm_user_module_field |
基础平台 | 网站用户充值记录 | comm_user_recharge |
基础平台 | 用户角色关系表 | comm_user_role |
基础平台 | 用户自定义系统表 | comm_user_sys |
基础平台 | 虚拟币币种兑换率表 | comm_virtual_currency |
基础平台 | 通用访问统计表 | comm_visit_count |
基础平台 | 通用访问明细表 | comm_visit_detail |
基础平台 | WebService管理 | comm_webservice |
基础平台 | 网站屏蔽规则设置 | comm_web_filter_config |
基础平台 | 网站运行状态监控表 | comm_web_listen_conf |
基础平台 | 中外文字词对照表 | comm_word_trans |
基础平台 | 自定义应用工作台页面设置 | comm_workhome_set |
微信 | 微信关键词回复 | weixin_keyword |
微信 | 微信小程序场景码表 | weixin_micro_scene |
微信 | 微信图文消息表 | weixin_news_message |
微信 | 微信场景二维码扫码记录 | weixin_scene_log |
微信 | 微信服务账号设置 | weixin_service_account |
微信 | 微信服务号菜单设置 | weixin_service_menu |
五、多租户的RBAC用户角色权限数据库设计
如果大家需要查看详细的数据库设计,在下载DDL脚本以后,执行
select b.sys_nm,a.table_name_cn,a.table_name from comm_table_def a,comm_sub_system b where a.sys_code = b.sys_code order by a.sys_code
查看数据库表结构清单。执行下面的SQL查看数据库表结构说明:
select a.table_name,a.table_name_cn,b.* from comm_table_def a,comm_column_def b where a.serial_no=b.table_serial_no order by a.sys_code,a.table_name,b.column_name
基于多租户的RBAC用户角色权限的数据库表包括:
(1)单位基本信息表 comm_company (单位即独立的租户,主键pk_id)。
(2)部门基本信息表 comm_dept,comm_dept.com_id=comm_company.pk_id
(3)用户基本信息表 comm_user ,comm_user.com_id=comm_company.pk_id且用户表与
部门表的关联:comm_user.dept_id=comm_dept.pk_id,用户表的login_id对
应SpringSecurity框架的username。主键是user_id
(4)角色表 comm_roles,存储系统中的角色。
(5)comm_auth:这个是权限资源表,菜单ID和资源ID都存储在这个表中。这个表里有
AUTH_ID,可对应Spring Security框架的的AUTHORITY ID,auth_resource是资源
URL,支持通配符,是SpringSecurity框架控制的URL资源。
(6)comm_role_auth:角色权限关系表,存储角色及权限的关系。
(7)comm_user_role:存储用户及角色的关系。通过用户表、角色表、用户角色关系表、
角色权限管理表关联,可以查询用户拥有的具体权限。
用户权限关系表:原来设计有comm_user_auth,但是这个表对性能影响太大,故不采
纳,包括之前也有部门权限管理表,也因为性能问题最终不再使用。
对于多租户的角色权限管理,上面是一套完整的数据库结构,为了方便权限查询,所以
基于上面的数据库表结构定义了一个VIEW视图,DDL脚本中的是通过Navicate导出来的,
所以可读性不如下面的原始view脚本:
create view v_user_auth as
select a.user_id,a.login_id,b.auth_id,b.comm_code,b.auth_name,b.auth_resource,b.pic_file,b.sort_no,b.menu_url,b.menu_sort_no,b.layui_name,b.layui_jump,b.is_layui
from comm_user a,comm_auth b , comm_user_role d,comm_role_auth e
where a.user_id = d.user_id
and a.com_id='C0001'
and a.is_in_use='Y'
and d.role_id = e.role_id
and e.auth_id = b.auth_id
and b.data_flg ='Y' union
select a.user_id,a.login_id,b.auth_id,b.comm_code,b.auth_name,b.auth_resource,b.pic_file,b.sort_no,b.menu_url,b.menu_sort_no,b.layui_name,b.layui_jump,b.is_layui
from comm_user a,comm_auth b , comm_user_role d,comm_role_auth e,comm_com_auth f
where a.user_id = d.user_id
and a.com_id=f.com_id
and a.is_in_use='Y'
and d.role_id = e.role_id
and e.auth_id = b.auth_id
and b.data_flg ='Y'
and b.comm_code = f.auth_code
;
在上面的脚本中,定义了权限视图v_user_auth,这个权限视图是支持多租户下的用户,C0001表示默认租户的,非C0001公司表示其他租户。这个视图在互联网项目下性能也还可以,如果加上用户权限关系表comm_user_auth的话就严重影响性能了。这个视图返回的有些字段例如图片等是为了给后台菜单呈现使用。auth_id对应资源ID,auth_resource是URL资源。另外is_in_use='Y'表示只有有效用户才有授权。
openjweb的这套数据库结构可以作为项目实战、学生毕业设计的数据库结构使用。后面我们将基于实际项目开发相应的功能,本文的数据库结构是后面项目实战的基础。
关于电商、在线培训、在线招聘的表结构因为数量太多,大家需要了解的话可下载项目或者资源包,导到数据库中查看。