在SQLServer等关系数据库管理系统(RDBMS)中,数据库包含各种对象。

在数据库中,模式(SCHEMA)是指数据库对象的逻辑集合。可以根据应用程序、访问权限和安全性使用模式(SCHEMA)来對对象分組。

SQL Server schemas

SQL Server提供以下内置逻辑模式:

dbo

sys

guest

INFORMATION_SCHEMA

每个SQLServer模式SCHEMA都必须有一个数据库用户作为架构所有者。模式所有者可以完全控制模式。还可以更改模式所有者或将对象从一个模式移动到另一个模式。

SQL Server 模式提供以下好处:

为管理逻辑组中的数据库对象提供更大的灵活性和控制力

允许您在不同模式之间快速移动对象

能够在模式级别管理对象安全性

允许用户管理数据库中的对象逻辑组

允许用户在各种架构之间转移所有权

假设对于公司的数据库,你希望根据部门对对象进行分组。

例如,HR 部门的表和存储过程应该在[HR] 架构中进行逻辑分组。同样,财务部门表应该在 [Fin] 模式中。每个架构(逻辑组)都包含SQL Server 对象,例如表、存储过程、视图、函数、索引、类型和同义词。

员工数据库模式示例

注意:模式是数据库范围的实体。您可以在SQL Server 实例的不同数据库中拥有相同的模式。

默认情况下,SQL Server对数据库中的所有对象使用[dbo] 模式。我们可以查询SCHEMA_NAME() 来获取连接用户的默认模式。

SELECT SCHEMA_NAME() AS defaultschema;

查詢及結果

列出当前数据库中的所有数据库模式

您可以使用 SSMS 或 T-SQL 查询获取模式列表。要在 SSMS 中执行此操作,您将连接到 SQL实例,展开 SQL 数据库并查看安全文件夹下的架构。

或者,您可以使用 sys.schemas获取数据库模式及其各自所有者的列表。

SELECT s.name AS schema_name,u.name AS schema_owner

FROM sys.schemas s

INNER JOIN sys.sysusers u ON u.uid = s.principal_id

ORDER BY s.name;

创建

使用 CREATE SCHEMA 创建 SQL Server 架构

要创建新的 SQL Server模式,我们使用 CREATE SCHEMA 语句。它的语法如下所示。

CREATE SCHEMA

AUTHORIZATION

Schema_name:要创建的模式

AUTHORIZATION:模式所有者名称

使用 [dbo] 模式所有者创建模式 [HR]、[Admin] 和 [Fin] 的脚本如下所示。

CREATE SCHEMA HR AUTHORIZATION dbo;

GO

CREATE SCHEMA Admin AUTHORIZATION dbo;

Go

CREATE SCHEMA Fin AUTHORIZATION dbo;

GO

在模式中创建新表

要创建诸如表之类的对象,我们需要指定将在其中创建对象的模式名称。例如,以下脚本在不同的模式 [HR]、[Admin] 和 [Fin] 中创建 [TableA]。

CREATE TABLE  [HR].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)CREATE TABLE   [Admin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)CREATE TABLE   [Fin].TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)

您可以 sys.tables 和 sys.schema 系统表以列出表名及其模式。

例如,以下查询返回[TableA] 及其架模式。

SELECT s.name AS SchemaName,t.name AS TableName
FROM sys.tables t
INNER JOIN sys.schemas s
ON t.schema_id = s.schema_id
WHERE t.name ='TableA'

如果在创建对象时未指定模式,SQL Server 将使用默认模式。例如,以下脚本在 dbo 模式中创建了一个 TableA。

CREATE TABLE TableA
(
ID int identity(1,1) PRIMARY KEY,
[Name] varchar(100)
)

注意:您可以在数据库的不同模式中创建具有相似名称的表。

所以您需要指定表的模式才能从正确的模式中获取数据。

例如,如上所示,我们在所有架构中都有[TableA]。因此,如果您直接选择记录而不指定架构,它会在默认 DBO 架构中查找对象。因此,需要指定模式名称,

例如 SELECT * FROM HR.TableA 以进行数据检索或执行任何操作。

在模式中创建存储过程

同样,您可以在指定模式中创建对象,例如存储过程。例如,以下脚本在 HR 模式中创建一个 SP。

CREATE PROCEDURE HR.GetEmpData
AS
BEGINSELECT * FROM [HR].[TableA]
END

 将对象转移到不同的模式

在某些时候,您可能需要将对象移动到特定模式。例如,假设您创建了一个新模式[Org],并且您希望您的 [HR].[TableA] 从 [HR] 模式移动到 [Org] 模式。

在这种情况下,可以使用具有以下语法的Alter SCHEMA 命令。

ALTER SCHEMA target_schema_name
TRANSFER [ entity_type :: ] securable_name;

脚本

CREATE SCHEMA [ORG]
GO
ALTER SCHEMA ORG TRANSFER HR.TableA

现在,将存储过程[HR].[GetEmpData] 转移到 [Org] 模式。

ALTER SCHEMA ORG TRANSFER HR.GetEmpData

执行脚本后,它会显示 [Org]模式中的存储过程。

但是,在SP部,代码仍然引用[HR].[TableA] 模式。

因此,不应使用 ALTER SCHEMA 來移动存储过程、函数或视图,因为它可能具有对象的引用。相反,可以删除、创建或更改SP,如下所示。

删除模式

您可以在 SQL Server 数据库中删除模式,但模式不应包含任何对象。例如,如果我尝试删除 [Org] 模式,它会给出一个错误,即您无法删除模式,因为对象 GetEmpData正在引用它。

因此,可以将对象转移到不同的模式或先删除对象。一旦我们删除或移动了数据库模式中的所有对象,您就可以删除模式。

注意:您不能删除系统模式,例如 dbo、information_schema、sys。

使用数据库模式的优势

数据库模式为我们提供了在数据库中创建逻辑对象组的灵活性。如果多个团队使用同一个数据库,我们可以设计各种模式来分組对象。

数据库模式可帮助数据库专业人员管理访问,因为您可以控制对用户各自模式的访问,而不是提供对整个数据库的访问。

您可以更有效地管理数据库,因为它允许多个模式中的相同对象显示为不同的逻辑组。

您可以在不同的模式中快速移动对象。

模式所有权可以分配给任何数据库主体或角色,所有权也可以转移。

它提供了额外的安全层,因为您需要知道正确的对象模式来查询或操作数据。您还可以控制对模式和模式拥有的对象的访问。

SQL Server: 数据库模式SCHEMA相关推荐

  1. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式...

    SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式 这篇文章主要介绍了SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式,需 ...

  2. SQL Server数据库的三种恢复模式

    SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式. sql server数据库提供了三种恢复模式:完整,简单和大容量日志,这些模式决定了sql server如何 ...

  3. SQL Server数据库的三种恢复模式:简单恢复模式、完整恢复模式和大容量日志恢复模式

    这篇文章主要介绍了SQL Server数据库的三种恢复模式:简单恢复模式.完整恢复模式和大容量日志恢复模式,需要的朋友可以参考下 如何图形界面下修改恢复模式 找到你想修改的数据库 右键 > 属性 ...

  4. SQL Server数据库单用户模式设置

    将数据库设置为单用户模式 单用户模式是指只有一个用户可以访问某个资源的状态. SQL Server数据库单用户模式设置 在进行一些数据库操作时,需要先把数据库设置为单用户模式,操作完成后再改回普通模式 ...

  5. JDBC连接SQL Server数据库[windows验证模式连接+SQL server验证]

    JDBC连接SQL Server数据库[windows验证模式连接+SQL server验证] 都说用JDBC连接数据库会出现很多问题,现总结.汇总一下. 前提是已经正确安装了SQL Server系列 ...

  6. 记录MS SQL Server数据库

    目录 介绍 如何使用文档工具记录SQL Server数据库 使用dbForge Documenter for SQL Server 记录数据库 结论 介绍 所有公司都会积累各种数据,而这些数据最终不可 ...

  7. SQL Server 数据库原理与应用

    1. 数据库概述 名词解释: DB:数据库 DBMS:数据库管理系统 DBS:数据库系统 DBA:数据库管理员 DBAS:数据库应用系统 数据管理的三个阶段:人工管理.文件系统阶段.数据库系统阶段. ...

  8. 如何对AWS RDS SQL Server数据库进行分类

    This article gives you an overview of cataloging AWS RDS SQL Server database objects like tables and ...

  9. 如何记录SQL Server数据库对象

    介绍 (Introduction) In any good programming reference, you will read that a developer has to document ...

最新文章

  1. 关于页面打印window.print()的样式问题
  2. 小问题(可能持续更新)
  3. python读取数据的函数详解_你了解文件缓存机制吗?磁盘文件如何读写?Python中open函数详解...
  4. Linux内核省电社区,Linux 内核社区补丁对比
  5. Android获取手机及外设存储空间
  6. spicy命令_Spicy Spring:动态创建自己的BeanDefinition
  7. Java ResourceBundle getLocale()方法与示例
  8. 计算机模拟病例考试试题,计算机模拟病例考试评分方法的研究概述
  9. 个人博客系统毕业设计开题报告
  10. 《设计模式详解》创建型模式 - 建造者模式
  11. vuex实例方法replaceState解决vuex页面刷新数据丢失问题
  12. 自建同步云盘服务器,自建云盘系列——Syncthing (BT Sync的开源替代)
  13. Java—求最大公约数和最小公倍数
  14. K210学习笔记——语音识别
  15. 设置电脑的背景颜色为保护色
  16. python xlsm_Excel中的xls、xlsx、xlsm混合文件,看我如何用Python统一处理!
  17. Unity如何画线条之美
  18. GNU 和 UNIX 命令
  19. 大数据利益相关者的利益矛盾及其伦理治理
  20. gridStudio 安装(linux)

热门文章

  1. 干货!用Python进行数据清洗方式,这几种都很常见!
  2. Python数据清洗 预处理入门完整指南!
  3. 【教学类-21-01】20221205《青花茶杯-A4纸插入式纸盒-统一花纹》(大班主题《我是中国人-青花瓷》)
  4. windows10锁屏唤醒后所有程序都关闭
  5. Python input输入超时选择默认值自动跳过
  6. ngfor ngif(ngif then else) ngswitch + ngfor里面使用ngif 和 ngswitch
  7. DOM系列之自定义属性操作
  8. 【SPFA,dp】黑心商店2
  9. 软件设计七大原则:(四)接口隔离原则
  10. python 多任务、线程、协程