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,并插入一条数据,如下图

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

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

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

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

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

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

SaaS模式应用之多租户系统开发(单数据库多Schema设计)的更多相关文章

  1. [课程设计]Scrum 2.3 多鱼点餐系统开发进度 (订单一览设计)

    Scrum 2.3 多鱼点餐系统开发进度  (订单一览设计) 1.团队名称:重案组 2.团队目标:长期经营,积累客户充分准备,伺机而行 3.团队口号:矢志不渝,追求完美 4.团队选题:餐厅到店点餐系统 ...

  2. BizTalk开发系列(十二) Schema设计之Group与Order

    开发BizTalk项目的时候会先约定各系统之间往来的消息格式. 由于BizTalk内部唯一使用XML文档.因此消息的格式为XML Schema(XML Schema 用于描述 XML 文档的结构).虽 ...

  3. BizTalk开发系列(十五) Schema设计之Qualified 与Unqualified

    XML Schema中的命名空间前缀限定包括对元素(Element)或属性(Attribute)的限定,即常见的如 “<ns0:root>...</ns0:root>”之类的格 ...

  4. 人人公益模式系统开发app

    人人公益模式系统开发app(微or电 158.1500.1390 小凡团队)人人公益系统开发,人人公益系统模式定制,人人公益系统开发模式,人人公益平台开发系统,人人公益APP系统开发. 深圳人人优益网 ...

  5. 6.4 Schema 设计对系统的性能影响

    前面两节中,我们已经分析了在一个数据库应用系统的软环境中应用系统的架构实现和系统中与数据库交互的SQL 语句对系统性能的影响.在这一节我们再分析一下系统的数据模型设计实现对系统的性能影响,更通俗一点就 ...

  6. 二十九、EFW框架开发的系统支持SaaS模式和实现思路

    回<[开源]EFW框架系列文章索引>        EFW框架源代码下载V1.3:http://pan.baidu.com/s/1c0dADO0 EFW框架实例源代码下载:http://p ...

  7. mPass多租户系统微服务开发平台

    目录 项目总体架构图 基于SpringBoot2.x.SpringCloud并采用前后端分离的企业级微服务,多租户系统架构微服务开发平台 mPaaS(Microservice PaaS)为租户业务开发 ...

  8. .NET简谈构件系统开发模式

    转自[王清培] http://www.cnblogs.com/wangiqngpei557/archive/2011/06/14/2080416.html 在本人的“.NET简谈插件系统开发模式”一文 ...

  9. .NET简谈插件系统开发模式

    摘选自[王清培]博客 http://www.cnblogs.com/wangiqngpei557/archive/2011/06/10/2077413.html 今天跟大家分享一下我们在日常开发中并不 ...

随机推荐

  1. NAT详解

    1.为什么出现了NAT? IP地址只有32位,最多只有42.9亿个地址,还要去掉保留地址.组播地址,能用的地址只有36亿左右,但是当下有数以万亿的主机,没有这么多IP地址怎么办,后面有了IPv6,但是 ...

  2. js字符串转日期,js字符串解析成日期,js日期解析, Date.parse小时是8点,Date.parse时间多了8小时

    js字符串转日期,js字符串解析成日期,js日期解析, Date.parse小时是8点,Date.parse时间多了8小时 >>>>>>>>>&g ...

  3. JS判断客户端、浏览器、操作系统

    一.JS判断客户端是否是iOS或者Android手机移动端 通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端. 方法一: var u = navigator.us ...

  4. 在VMware Workstation 9中安装Mac OS X 10.8 Mountain Lion

    本文环境: CPU:Intel Core i7 920: OS:Windows 7: 内存:8G: 玩Hackintosh各有各的理由,不管什么理由,利用虚拟机安装Mac OS X都是一个可行的办法. ...

  5. Myeclipse 搭建Java Web 项目 《一》

    今天将图文并茂的介绍如何使用myclipse 创建Java Web 项目;我使用的是myclipse 8.6 来进行创建: 1.打开Myeclipse,点击File --->然后New ---- ...

  6. iOS 手机摇一摇功能

    调用手机摇一摇功能其实很简单,在你调用的控制器的 viewDidLoad方法里调用 [UIApplication sharedApplication].applicationSupportsShake ...

  7. BZOJ 1085: [SCOI2005]骑士精神(A*算法)

    第一次写A*算法(这就是A*?如果这就是A*的话,那不就只是搜索的一个优化了= =,不过h函数如果弄难一点真的有些难设计) 其实就是判断t+h(x)(t为当前步数,h(x)为达到当前状态的最小步数) ...

  8. 新手学js的效果图1---( 淘宝等商城货物查看特效)

    本人结合之前所学一起写了,多个特效,只是新手自己瞎鼓捣的,思路清晰,具体实现的货物放大镜等,替换当中的img地址就可以查看特效 <!DOCTYPE html> <html lang= ...

  9. 地图定位CoreLocation框架,地理位置编码与反编码

    在现代互联网时代,越来越多的应用,都用到了地图定位功能,在iOS开发中,想要加入这种功能,必须基于两个框架进行开发: 1.Map Kit:用于显示地图, 2.CoreLocation:用于显示地理位置 ...

  10. Servlet支持上传多张图片

    首先前端的表单是这个形式: <form  target="_self" method="post" action="fileUploadMult ...