进销存系统数据隔离

需要隔离的表

中文名英文名是否需要隔离原因
基础数据操作记录表databasechangelog用户不能看到和自己毫无关系的数据
基础数据操作锁定记录表databasechangeloglock各用户锁定自己相关的数据
账户信息表jsh_account每个用户主体都应该是独立的账户
财务主表jsh_accounthead每个用户主体都应该是独立的财务账户
财务子表jsh_accountitem每个用户主体都应该是独立的财务账户
应用表jsh_app支持每个用户扩展定制自己的应用
资产记录表jsh_asset暂时无用,但也需要隔离
资产类型表jsh_assetcategory暂时无用,但也需要隔离
资产信息表jsh_assetname暂时无用,但也需要隔离
仓库表jsh_depot各自的仓库是独立的
单据主表jsh_depothead每个用户都有自己的订单
单据子表jsh_depotitem每个用户都有自己的订单详情
功能模块表jsh_functions功能定制个性化
收支项目表jsh_inoutitem和用户相关
操作日志jsh_log和用户相关
产品表jsh_material和用户相关
产品类型表jsh_materialcategory和用户相关
产品扩展字段表jsh_materialproperty和用户相关
经手人表jsh_person和用户相关
角色表jsh_role和用户相关
供应商 客户信息表jsh_supplier和用户相关
系统参数表jsh_systemconfig和用户相关
多单位表jsh_unit和用户相关
用户表jsh_user和用户相关
用户 角色 模块关系表jsh_userbusiness和用户相关, 支持用户模板
序列号表jsh_serial_number和用户相关
sequence 表tbl_sequence全局统一,便于查询
机构表jsh_organization和用户相关
机构用户关系表jsh_orga_user_rel和用户相关

隔离的方式

每一张表都会有一个租户 id,每一次操作都会写入对应的租户 id,以保证数据的隔离识别性。

-- ----------------------------
-- 时间:2019年3月18日
-- version:1.0.11
-- 此次更新
-- 1、批量增加大部分表的tenant_id租户字段
-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
-- ----------------------------
alter table jsh_account add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_accounthead add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_accountitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_asset add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_assetcategory add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_assetname add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_depot add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_depothead add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_depotitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_inoutitem add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_log add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_material add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_materialcategory add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_orga_user_rel add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_organization add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_person add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_role add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_serial_number add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_supplier add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_systemconfig add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_unit add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_user add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
-- ----------------------------
-- 时间:2019年4月24日
-- version:1.0.14
-- 此次更新
-- 1、批量增加部分表的tenant_id租户字段
-- 特别提醒:之后的sql都是在之前基础上迭代,可以对已存在的系统进行数据保留更新
-- ----------------------------
alter table databasechangelog add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table databasechangeloglock add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_app add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_functions add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_materialproperty add tenant_id bigint(20) DEFAULT null COMMENT '租户id';
alter table jsh_userbusiness add tenant_id bigint(20) DEFAULT null COMMENT '租户id';

注册时初始化

注册时需要给注册用户创建一个独立的空间(数据初始化)。

需要初始化的数据

中文名英文名需要初始化的原因
应用表jsh_app支持每个用户扩展定制自己的应用
功能模块表jsh_functions功能定制个性化
产品扩展字段表jsh_materialproperty和用户相关,每个用户可以修改
角色表jsh_role角色模板定义
用户表jsh_user注册用户信息写入
用户 角色 模块关系表jsh_userbusiness调用用户模板

注册时验证登录名和用户名是否存在

登录名保持全局唯一,不然两个公司的员工用相同的登录名无法识别。
用户名同一个租户范围内内唯一

添加新用户需要对新用户进行数据范围界定

添加用户数据范围界定

添加新用户时,该用户可以使用的数据空间需要做一个界定,最大范围一定是创建该用户的租户所能达到的范围,但最小范围是什么呢?

中文名英文名需要初始化的原因
用户表jsh_user和添加该用户的用户相同的租户 id

添加新用户登录名和用户名校验

登录名保持全局唯一,不然两个公司的员工用相同的登录名无法识别。
用户名同一个租户范围内内唯一

sequence 表

sequence 表中用于生成单据编号的 depot_number_seq 取值范围为 -9223372036854775808 - 9223372036854775807
在这样的大数量级下,可以不做隔离,但是用户多起来之后会达到 mysql 的写入性能瓶颈,在那种情况下就需要考虑用特殊的方式去维护。