获课:789it.top/14915/
在企业级应用开发中,数据库设计是系统架构的核心基石。若依框架作为国内广泛使用的快速开发平台,其数据库设计方案融合了规范性、扩展性与安全性考量。本文将从表结构规范、多租户实现、数据权限控制三个维度,系统解析若依框架的数据库设计哲学与实践方案。
一、表结构规范化设计体系
若依框架的表结构设计遵循"业务清晰、扩展便捷、性能优化"的三原则,构建了层次分明的规范化体系。
1.1 分层命名规范
- 基础表:采用
sys_前缀(如sys_user用户表),存放系统级基础数据 - 业务表:使用
业务模块_前缀(如order_main订单主表),按功能域划分 - 日志表:统一
log_前缀(如log_operate操作日志表),便于集中管理 - 临时表:标识
tmp_前缀(如tmp_import数据导入中间表),明确生命周期
1.2 核心字段标准化
每张业务表强制包含以下标准字段:
- 元数据字段:
create_by(创建人)、create_time(创建时间)、update_by(更新人)、update_time(更新时间) - 状态字段:
status(状态码)、del_flag(删除标志,实现逻辑删除) - 租户字段:
tenant_id(租户ID,多租户场景必备) - 版本字段:
version(乐观锁版本号,防止并发冲突)
1.3 关联关系设计范式
- 一对多关系:通过外键关联(如
order_main.user_id关联sys_user.user_id) - 多对多关系:采用中间表实现(如
sys_role_menu角色菜单关联表) - 树形结构:使用
parent_id字段(如部门表sys_dept的父部门ID) - 历史数据:通过时间戳字段实现版本控制(如
sys_user_history用户信息变更历史表)
1.4 索引优化策略
- 主键策略:统一使用自增ID(
id BIGINT PRIMARY KEY AUTO_INCREMENT) - 唯一索引:对业务唯一性字段建立(如用户名
sys_user.login_name) - 复合索引:遵循最左前缀原则(如订单查询的
(user_id, create_time)) - 全文索引:对搜索字段建立(如商品描述
product.description)
二、多租户数据隔离方案
若依框架提供灵活的多租户实现机制,支持三种典型隔离模式:
2.1 独立数据库模式
- 架构特点:每个租户拥有独立数据库实例
- 适用场景:金融、医疗等强隔离要求的行业
- 实现要点:
- 动态数据源路由:通过
AbstractRoutingDataSource实现数据库切换 - 租户识别策略:支持域名识别、Token识别、参数传递等多种方式
- 初始化脚本:提供租户数据库自动创建工具
2.2 独立Schema模式
- 架构特点:同一数据库实例中不同Schema隔离
- 适用场景:中型企业SaaS应用
- 实现要点:
- Schema命名规范:采用
tenant_前缀(如tenant_001) - 权限控制:通过数据库用户授权实现Schema访问限制
- 跨Schema查询:使用
schema_name.table_name语法
2.3 共享表模式
- 架构特点:所有租户数据存储在相同表中,通过
tenant_id字段区分 - 适用场景:轻量级多租户应用
- 实现要点:
- 字段扩展性:预留
ext_json字段存储租户个性化数据 - 查询优化:默认添加
tenant_id条件,避免数据泄露 - 数据迁移:提供租户数据导出导入工具
2.4 混合模式实践
若依框架支持动态组合上述模式,例如:
- 核心数据(如用户、角色)采用共享表模式
- 业务数据(如订单、合同)采用独立Schema模式
- 审计数据(如操作日志)采用独立数据库模式
三、数据权限控制体系
数据权限是若依框架安全体系的核心组件,构建了"RBAC+数据权限"的双重控制模型。
3.1 权限模型设计
- 角色维度:通过
sys_role表定义角色,sys_role_dept表关联部门数据范围 - 用户维度:
sys_user_role表建立用户角色关系,支持角色继承 - 数据维度:
- 行级权限:通过
sys_data_scope表定义数据范围规则 - 列级权限:通过
sys_column_permission表控制字段可见性
3.2 数据范围控制策略
若依框架提供五种典型数据范围实现:
- 全部数据权限:不限制数据范围(管理员角色)
- 本部门数据权限:
dept_id = 当前部门ID - 本部门及以下数据权限:
dept_id IN (当前部门及子部门ID) - 自定义数据权限:通过
data_scope字段配置SQL片段 - 仅本人数据权限:
create_by = 当前用户ID
3.3 动态权限过滤机制
- MyBatis拦截器:通过
@DataScope注解自动添加权限条件 - SQL解析器:重写JDBC预处理语句,注入权限过滤条件
- API网关层:在服务调用前进行权限校验
- 前端控制:通过Vue组件权限指令控制界面元素显示
3.4 权限审计与追溯
- 操作日志:记录所有权限变更操作(
log_permission表) - 数据访问日志:记录敏感数据查询行为(
log_data_access表) - 定期审计:提供权限使用情况分析报表
四、最佳实践建议
- 渐进式设计:初期采用共享表模式快速验证,后期根据业务发展逐步迁移
- 字段预留策略:为未来扩展预留20%的字段空间,避免频繁表结构变更
- 分区表应用:对大数据量表(如日志表)按时间范围进行分区
- 读写分离:主库负责写操作,从库承担读操作,提升并发性能
- 缓存策略:对高频查询数据建立Redis缓存,减少数据库压力
结语
若依框架的数据库设计方案体现了"规范先行、安全为本、灵活扩展"的设计哲学。通过标准化的表结构规范、可配置的多租户模式、精细化的数据权限控制,构建了适应不同规模企业的数据库架构。在实际应用中,需结合具体业务场景进行适度调整,在数据隔离强度、系统性能与开发效率之间找到最佳平衡点。随着微服务架构的普及,数据库设计正从单体集中式向分布式演进,若依框架的模块化设计理念为这种转型提供了良好基础。
本站不存储任何实质资源,该帖为网盘用户发布的网盘链接介绍帖,本文内所有链接指向的云盘网盘资源,其版权归版权方所有!其实际管理权为帖子发布者所有,本站无法操作相关资源。如您认为本站任何介绍帖侵犯了您的合法版权,请发送邮件
[email protected] 进行投诉,我们将在确认本文链接指向的资源存在侵权后,立即删除相关介绍帖子!
暂无评论