SaaS模式应用之多租户系统开发(单数据库多Schema设计)

摘要:
至于Mysql,Oracle的Schema应该是有不同的设计,不同于SqlServer,这里我就只针对SqlServer而言。本篇暂时只做一个多租户系统在数据库存储层次上的设计的环境搭建事例。。。。。。

SaaS是Software-as-a-Service(软件即服务)的简称,这边具体的解释不介绍。

多租户的系统可以应用这种模式的思想,将思想融入到系统的设计之中。

一、多租户的系统,目前在数据库存储上,一般有三种解决方案:

1.独立数据库

2.共享数据库,隔离数据架构

3.共享数据库,共享数据架构

这里我就系统的实际需求情况,选择了第二种解决方案,下面简单介绍下

二、数据库我选用的是SqlServer,因为SqlServer自带的Schema刚好符合这种需求。至于Mysql,Oracle的Schema应该是有不同的设计,不同于SqlServer,这里我就只针对SqlServer而言。

如果你百度SqlServer的Schema方面的知识介绍,会有不少的Schema的语法介绍,但是很少有一套sql脚本针对多租户设计的,我在这里做个整理。

1.创建数据库

create database
SingleDbMultipleSchema
go

2.切换到目标数据库

use SingleDbMultipleSchema
go

3.创建用户并绑定登录名并赋予默认schema

create login UserTemp with password = N'admin@123'
create user UserTemp for login UserTemp with default_schema = UserTempSchema
go

4.创建schema并授权默认用户

create schema UserTempSchema authorization UserTemp
go

5.补充建表权限(PS:这句sql找的好苦。。。)

grant create table to UserTemp
go

6.给用户分配schema权限(使用到存储过程的权限分配时,使用schema分配此类权限)

GRANT INSERT, SELECT, UPDATE, DELETE, EXECUTE, REFERENCES
ON SCHEMA:: UserTempSchema
TO UserTemp
go

7.最后附上常用删除Sql语句(格式如下)

drop table schtable
drop user [User_tmp]
drop user testuser2
drop login [User_tmp]
drop login testlogin2
drop schema User_tmpSchema

以dbo用户(sa登录名)新建一张表table_1,默认产生dbo.table_1,并插入一条数据,如下图

SaaS模式应用之多租户系统开发(单数据库多Schema设计)第1张

切换用户,使用刚刚创建的用户UserTemp登录,新建一张表table_1,产生UserTempSchema.table_1,并插入一条数据,如下图

SaaS模式应用之多租户系统开发(单数据库多Schema设计)第2张

以UserTemp用户,测试查询语句,结果如下,很显然虽然selcet语句没指定Schema,但是查询到了我们想要的结果

SaaS模式应用之多租户系统开发(单数据库多Schema设计)第3张

切换到dbo用户(sa登录名),测试查询语句,结果如下,虽然没指定schema名称,但是依旧是我们想要的结果

SaaS模式应用之多租户系统开发(单数据库多Schema设计)第4张

上面的sql脚本按步骤执行,执行1-5即可,后面的sql可根据自己的需求额外使用。

本篇暂时只做一个多租户系统在数据库存储层次上的设计(SqlServer下“单数据库多Schema模式”)的环境搭建事例

(● ̄(エ) ̄●)。。。。。。

免责声明:文章转载自《SaaS模式应用之多租户系统开发(单数据库多Schema设计)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FastDFS简介和安装Android 上预览 PDF 文件下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linq排序,获取前5条数据

_dic = _dic.OrderByDescending(x => x.Value).ToDictionary(x=>x.Key,x=>x.Value); var Num = _dic.ToList().Take(5).Select(a => a.Key.ToString()).ToArray(); var Str = strin...

数据输入——生成你需要的echart图(世界地图,气泡图)

上一篇文章介绍了:堆积柱状图、扇形图、嵌套环形图,现在来介绍一下:世界地图和气泡图 1.世界地图 http://echarts.baidu.com/examples/editor.html?c=map-world-dataRange 这个就不多做介绍了,大家看图就可以了,颜色越深表示value越大,白色表示data中没有这个国家。 2.气泡图 按照这张...

Spring定时任务的几种实现

近日项目开发中需要执行一些定时任务,比如需要在每天凌晨时候,分析一次前一天的日志信息,借此机会整理了一下定时任务的几种实现方式,由于项目采用spring框架,所以我都将结合 spring框架来介绍。 一.分类 从实现的技术上来分类,目前主要有三种技术(或者说有三种产品): Java自带的java.util.Timer类,这个类允许你调度一个java....

ABP官方文档翻译 3.1 实体

实体 实体类 聚合根类领域事件 常规接口 审计 软删除 激活/失活实体 实体改变事件 IEntity接口   实体是DDD(领域驱动设计)的核心概念之一。Eric Evans描述它为"An object that is not fundamentally defined by its attributes, but rather by a t...

01.SQLServer性能优化之----强大的文件组----分盘存储

前天有学弟问逆天:“逆天,有没有一种方式可以让我一个表存到两个数据库文件中,或者说怎么把一个表的数据平摊到其他数据库文件中?” (⊙o⊙)…,逆天数据库优化不是很强悍,不过类似的情景倒是见过,可以给你一个思路。比如说我们在创建数据库的时候就可以好好利用文件组。 举个例子: 我们一般创建数据库都是这么来的: create database BigValu...

如何打造高性能大数据分析平台

1.大数据是什么? 大数据是最近IT界最常用的术语之一。然而对大数据的定义也不尽相同,所有已知的论点例如结构化的和非结构化、大规模的数据等等都不够完整。大数据系统通常被认为具有数据的五个主要特征,通常称为数据的5 Vs。分别是大规模,多样性,高效性、准确性和价值性。 据Gartner称,大规模可以被定义为“在本(地)机数据采集和处理技术能力不足以为用户带来...