一、回顾

        在前面的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.icon-default.png?t=O83Ahttps://github.com/openjweb/cloud/tree/master

        另外我把这个SQL文件上传到资源库,仅需1个积分就可下载。如果不想消费1积分的话可以在Github上下载项目。这个数据库有大约500个左右的数据库表,如果做项目开发的话,可以节省大量的数据库设计的时间。CSDN中点下面的链接可下载数据库表结构DDL文件:

https://download.csdn.net/download/baozhengw/90104728icon-default.png?t=O83Ahttps://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的这套数据库结构可以作为项目实战、学生毕业设计的数据库结构使用。后面我们将基于实际项目开发相应的功能,本文的数据库结构是后面项目实战的基础。

        关于电商、在线培训、在线招聘的表结构因为数量太多,大家需要了解的话可下载项目或者资源包,导到数据库中查看。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐