在公司做了一年的SaaS内核系统,但是有些东西不知道能不能透露出来。我尽量在不透露一些敏感东西的情况下(这个度我无法把控,只能是笼统了),将某些关于数据库方面的精髓传递出来。如果表达不畅,请谅解。

前面的两篇讲解了在传统系统和大数据量下的数据库设计应该注意的事项。

接下来需要换一种思路,在SaaS系统中,数据库应该如何进行设计。

与传统开发的思考点不同,在SaaS中,可能更多考虑的是数据隔离(在这里考虑共享数据库,共享数据表),数据通用方面

租户id

既然是SaaS平台,那么肯定是多租户的一个生态。那么在数据库层面,一定要有一个字段来隔离数据。

这个字段在每个表都需要有,且每一次数据库的操作都需要有该字段作为条件。

这一步数据安全的控制都放在了代码中,所以安全性和隔离性都是要依赖编码的。

表的自增id

这个字段还是要有的,但是强烈建议不要在删除行数据,查询数据,修改数据时使用到该字段,因为该字段的单独操作会破坏掉数据的隔离性。也就是前面所说的,所有的sql操作,都要带上租户id再进行。

数据来源标识

作为SaaS平台,在很多情况下,不同的租户可能有一样的数据,或者是通过某些编程,或者是通过配置的方式,通过一套标准数据生成了各个租户的数据。可以实现租户的自定义。

但是在某些情况下,可能某个特性不需要租户进行自定义,而是SaaS系统进行一个控制,那么就需要一个标识,来知道这个数据来源一致。

需要确定的是,这个标识,在这个租户下是唯一的。也就是说,前面的自增id没有用,但是这个标识和租户的id是可以唯一索引到一条数据的。

强烈建议使用租户id和数据的来源标识进行操作数据。

元数据

元数据用一句话就是描述数据的数据

在SaaS中,存在着一些通用配置,通过这些通用配置,可以自由定义一些业务模型,可以极其快速的实现业务需求。

这个元数据,我正在公司负责这块,但是可能不能透露。

简单的说几句,元数据能用非关系型数据库就不要用关系型数据库。前期量级小的时候问题,后面访问量,压力很大。

其次,通用的一些业务模型,一定要抽取出来。元数据对业务来说是极其基础的存在的,业务不应该感知到元数据的存在。业务感知的应该是元数据的一些业务组合,也就是业务模型。

通过组装业务模型,可以配合不同的业务场景,最后实现业务功能。

租户数据

租户的数据,是基于一些元数据来生成的,所以是可扩展的。在这里,也建议不要使用关系型数据库,因为不太适合,非关系型数据库更加适合SaaS系统这个体系。

其实东西很多,但是暂时先讲到这了,我也不知道某些东西是不是属于公司的,前些日子我们公司刚爆出了员工透露公司机密到网上,所以。。。

最后讲下吧,如果要做SaaS系统,一定要考虑长远,不要先被业务拖累。如果在半年一年内无法脱离业务需求来架构设计与开发SaaS系统,那么我的建议是,不要做什么SaaS了,开发业务吧,不然公司都活不下去的。

整篇看上去会比较理论,但是实际上,这些都是实践后的一些理论点。有很多的一些东西,我无法分享太多,非常抱歉。这次也是借这个阿里云活动的机会,分享一点出来。

原文链接
本文为云栖社区原创内容,未经允许不得转载。

作为后端开发如何设计数据库系列文章 设计SaaS系统表结构相关推荐

  1. db2查看表结构_作为后端开发如何设计数据库系列文章(一)设计传统系统表结构(Java开发)...

    本篇为第一篇.讲解传统系统的表结构设计(Java开发). 讲讲如何避免数据库设计的一些坑,方便后期的开发与维护. 以前经常能够看到,数据库范式,现在说数据库三大范式的少了. 三大范式我以前也很严格的弄 ...

  2. 作为后端开发如何设计数据库系列文章(一)设计传统系统表结构

    本篇为第一篇.讲解传统系统的表结构设计(Java开发). 讲讲如何避免数据库设计的一些坑,方便后期的开发与维护. 以前经常能够看到,数据库范式,现在说数据库三大范式的少了. 三大范式我以前也很严格的弄 ...

  3. 后端开发如何设计数据库系列文章(一)设计传统系统表结构(Java开发)

    本篇为第一篇.讲解传统系统的表结构设计(Java开发). 讲讲如何避免数据库设计的一些坑,方便后期的开发与维护. 以前经常能够看到,数据库范式,现在说数据库三大范式的少了. 三大范式我以前也很严格的弄 ...

  4. 后端开发如何设计数据库系列文章(二)设计大数据量表结构

    上篇文章讲解了传统数据库的一些设计注意点. 本篇为第二篇,在大数据量的情况下,如何去提前设计这个表结构,来达到一个比较好的效果.对于团队,对于后续的维护和扩展都带来更大的便利. 自增id 自增id还是 ...

  5. mysql 中caption_Django-Model操作数据库(增删改查、连表结构)(示例代码)

    Django-Model操作数据库(增删改查.连表结构) 一.数据库操作 1.创建model表 基本结构 from django.db importmodelsclassuserinfo(models ...

  6. java修改数据库表结构_数据库设计(一):设计传统系统表结构(Java开发)

    以下文章来源于微信公众号 程序编程之旅 ,作者陈浩翔 此处仅供本人学习记录之用,侵删 本篇为第一篇.讲解传统系统的表结构设计(Java开发). 讲讲如何避免数据库设计的一些坑,方便后期的开发与维护. ...

  7. ISO 26262系列文章之————4系统开发

    目录 A 名词解释 A.1 FSC A.2 TSC A.3 TSR A.4 SG A.5 SM A.6 安全确认 A.7 DC A.8 FMEA A.9 FMEDA A.10 FTA A.11 DFA ...

  8. 项目开发中,数据库是怎么设计的?

    目录 数据库设计的基本步骤 引言 1.需求分析阶段(常用自顶向下) 2.概念结构设计阶段(常用自底向上) 3.逻辑结构设计阶段(E-R图) 4.物理设计阶段 5.数据库实施阶段 6.数据库运行和维护阶 ...

  9. 硬件设计电源系列文章-DCDC转换器基础知识

    目录 概要 整体架构流程 技术名词解释 1.DCDC 2.同步整流: 3.异步整流 技术细节 1.开关稳压器的种类: 2.异步整流与同步整流的原理: 3.反馈控制方式 小结 概要 提示:这里可以添加技 ...

最新文章

  1. idea svn的项目无法标识修改新增的类_是时候让你的 IDEA 飞起来啦!
  2. 武汉科技大学ACM :1004: C语言程序设计教程(第三版)课后习题6.3
  3. Hibernate用Mysql数据库时链接关闭异常的解决
  4. Android—内存泄漏、GC及LeakCanary源码解析
  5. Metal日记:使用步骤指南
  6. linux批量筛选序列变异位点,使用bedtools获取指定坐标上下游的序列
  7. js中定义用字符串拼接起来的变量名的变量
  8. jquery-ui 对话框_jQuery UI对话框插件
  9. 【深度学习】你该会的精选面试题(二)
  10. java 定义泛型方法_Java中泛型方法的定义
  11. 任正非:华为留不住人才是我的痛!
  12. 计算机考试怎样删除美式键盘,Win10怎么把美式键盘删除_Win10彻底删除eng美式键盘?-192路由网...
  13. ITIL 4 Foundation 思维导图笔记整理
  14. Python 中国象棋源码 V1
  15. 无线模块数据加密,反码校验,发送字符串ABCDEFGHIJKLMNOP LED频闪
  16. Tivoli Storage Manager[转]
  17. 会畅通讯会议客户端分析
  18. 华为云排名第八,2019年云综合收入85亿元
  19. uni-app引用npm第三方库
  20. 51单片机学习笔记之数码管工作原理

热门文章

  1. 刀片 显卡 排行_AMD发布RadeonRX6000系列游戏显卡 4599元起
  2. 多线程操作时操作系统时间片_从零开始自制操作系统(15):内核多线程
  3. python正则表达式生成器_Python学习之路-装饰器生成器正则表达式
  4. python输入文字、成为字典_Python实现创建字典
  5. python docx官网_【记录】尝试用DocxyGen为Python代码生成文档
  6. php静态数组变量初始化,为什么数组初始化时,赋值不能是常量?
  7. mysql的分页怎么不对_jsp+mysql分页显示我的怎么不对啊?显示始终不对!
  8. linux 嵌入式 快照_Linux 系统之Systemd
  9. excel中空格去不掉java_在Apache POI中跳过空白Excel单元格
  10. presto java_Presto Jdbc