这几年,各行各业的SaaS互联网系统应用比较广泛。2B应用的SaaS系统,基本上有如下特点:
- 用户数不一定多,并发性不高(相比于C端产品)
- 数据量可能会大
- 个性业务需求多,配置灵活
在数据库(Mysql)设计之初,有2个坑比较容易踩到,将会给整个系统带来麻烦,尤其后期的扩展和优化方面。
1.各个表没有加company_id
各个表很有必要进行反范式设计,都统一加上company_id,如:在电商订单处理ERP系统中,给订单商品表也加上company_id

所有表加上company_id的好处:
- 所有数据都通过company_id进行逻辑分离,相对独立
- 安全性提升:访问任何数据,都可以通过严格匹配访问者company_id和访问数据的company_id,使得任何人再怎么瞎搞,也基本只能搞乱本公司的数据,很难去访问到其它公司的数据
- 索引:自己建的所有二级索引,第一左侧索引都可以为company_id,再怎么差的情况,也不会进行全表扫描,性能下限高
- 后期提升性能:可以按company_id进行分区,这样本公司的数据写在一起,每个page里面的数据都是本公司的,从磁盘加载数据的命中率更高,能大大减少磁盘io
2.垂直分表原则不合理
2B端的S

本文探讨SaaS系统数据库设计中常见的两个误区:未在各表加入company_id导致数据管理和性能优化困难,以及垂直分表原则不合理影响查询效率。文章提出解决方案,强调逻辑分离、安全性提升、索引优化及合理垂直分表的重要性。
最低0.47元/天 解锁文章
722





