创建数据库架构

适用于:SQL ServerAzure SQL 数据库Azure SQL 托管实例Azure Synapse AnalyticsAnalytics Platform System (PDW)Microsoft Fabric 中的仓库

本文将介绍如何使用 SQL Server Management Studio 或 Transact-SQL 在 SQL Server 中创建架构。

权限

  • 若要创建架构,必须对数据库具有 CREATE SCHEMA 权限。

  • 若要指定其他用户作为所创建架构的所有者,则调用方必须具有对该用户的 IMPERSONATE 权限。 如果指定一个数据库角色作为所有者,则调用方必须满足以下任意条件:拥有该角色的成员身份或对该角色的 ALTER 权限。

使用 SQL Server Management Studio 创建架构

  1. 在对象资源管理器中,展开 “数据库” 文件夹。

  2. 展开要在其中创建新数据库架构的数据库。

  3. 右键单击“安全性”文件夹,指向“新建”,并选择“架构”

  4. 在“架构 - 新建”对话框中的“常规”页上,在“架构名称”框中输入新架构的名称

  5. “架构所有者” 框中,输入要拥有该架构的数据库用户或角色的名称。 或者,选择“搜索” 以打开“搜索角色和用户”对话框。

  6. 选择“确定”

注意

如果要使用 SSMS 针对 Azure SQL 数据库或 Azure Synapse Analytics 创建架构,则不会显示对话框。 将需要运行生成的“创建架构模板 T-SQL 语句”。

架构 - 新建”对话框还在两个额外页上提供了选项:“权限”和“扩展属性”。

  • “权限” 页将列出所有可能的安全对象以及可授予登录名的针对这些安全对象的权限。

  • “扩展属性”页允许您向数据库用户添加自定义属性。

使用 Transact-SQL 创建架构

  1. “对象资源管理器” 中,连接到 数据库引擎的实例。

  2. 在标准栏上,选择“新建查询” 。

  3. 以下示例将创建一个名为 Chains 的架构,然后创建名为 Sizes 的表。

    CREATE SCHEMA Chains;
    
    GO
    
    CREATE TABLE Chains.Sizes
    (
        ChainID INT,
        width DECIMAL (10, 2)
    );
    
  4. 可在单个语句中执行更多选项。 下面的示例将创建由 Sprockets 拥有的、包含表 JoeNineProngs 架构。 该语句向 SELECT 授予 Bob 权限,而对 SELECT 拒绝授予 John 权限。

    CREATE SCHEMA Sprockets
        AUTHORIZATION Joe;
    GO
    
    CREATE TABLE NineProngs
    (
       source INT,
       cost INT,
       partnumber INT
    );
    GO
    
    GRANT SELECT
       ON SCHEMA::Sprockets TO Bob;
    GO
    
    DENY SELECT
       ON SCHEMA::Sprockets TO John;
    GO
    
  5. 执行以下语句,查看当前数据库中的架构:

    SELECT *
    FROM sys.schemas;
    

限制和局限

  • 新架构由以下数据库级别主体之一拥有:数据库用户、数据库角色或应用程序角色。 在架构中创建的对象由架构的所有者拥有,并且在 sys.objects 中具有 NULLprincipal_id。架构所包含对象的所有权可转让给任何数据库级主体,但架构所有者始终保留对该架构内对象的 CONTROL 权限。

  • 创建数据库对象时,如果将某一有效的域主体(用户或组)指定为对象所有者,则该域主体将作为架构添加到数据库中。 这个新架构将为该域主体所有。