教程:使用 Azure Data Studio (ADS) 在 Azure SQL 数据库中设计关系数据库

适用于:Azure SQL 数据库

Azure SQL 数据库是云 (Azure) 中的关系数据库即服务 (DBaaS)。 本教程介绍如何使用 Azure 门户和 Azure Data Studio (ADS) 来完成以下操作:

  • 使用 Azure Data Studio 连接到数据库
  • 使用 Azure Data Studio 创建表
  • 使用 BCP 大容量加载数据
  • 使用 Azure Data Studio 查询数据

注意

本教程使用 Azure SQL 数据库。 你也可以使用弹性池中的共用数据库或 SQL 托管实例。 若要连接到 SQL 托管实例,请参阅以下 SQL 托管实例快速入门:快速入门:配置 Azure VM 以连接到 Azure SQL 托管实例快速入门:配置从本地到 Azure SQL 托管实例的点到站点连接

先决条件

要完成本教程,请确保已安装:

登录到 Azure 门户

登录 Azure 门户

创建服务器级 IP 防火墙规则

Azure SQL 数据库在服务器级别创建 IP 防火墙。 此防火墙阻止外部应用程序和工具连接到服务器和服务器上的任何数据库,除非防火墙规则允许其 IP 通过防火墙。 若要启用与数据库的外部连接,必须首先为 IP 地址(或 IP 地址范围)添加 IP 防火墙规则。 遵循这些步骤创建服务器级 IP 防火墙规则

重要

通过端口 1433 进行的 Azure SQL 数据库通信。 如果尝试从企业网络内部连接到此服务,则该网络的防火墙可能不允许经端口 1433 的出站流量。 如果是这样,则无法连接到数据库,除非管理员打开端口 1433。

  1. 部署完成后,请从 Azure 门户菜单中选择“SQL 数据库”,或在任何页面上搜索并选择“SQL 数据库”。

  2. 在“SQL 数据库”页上选择“yourDatabase”。 此时会打开数据库的概览页,其中显示了完全限定的服务器名称(例如 contosodatabaseserver01.database.chinacloudapi.cn),并提供了其他配置的选项。

    Azure 门户的数据库概述页的屏幕截图,其中突出显示了服务器名称。

  3. 复制此完全限定的服务器名称,将其用于从 SQL Server Management Studio 连接到服务器和数据库。

  4. 在“设置”下选择“网络” 。 选择“公共访问”选项卡,然后选择“公用网络访问”下的“所选网络”以显示“防火墙规则”部分。

    Azure 门户“网络”页的屏幕截图,其中显示了设置服务器级 IP 防火墙规则的位置。

  5. 在工具栏上选择“添加客户端 IPv4”,将当前的 IP 地址添加到新的 IP 防火墙规则。 IP 防火墙规则可以针对单个 IP 地址或一系列 IP 地址打开端口 1433。

  6. 选择“保存”。 此时会针对当前的 IP 地址创建服务器级 IP 防火墙规则,在服务器上打开端口 1433。

  7. 选择“确定”,然后关闭“防火墙设置”页。

你的 IP 地址现在可以通过 IP 防火墙。 现在可以使用 SQL Server Management Studio 或其他所选工具连接到数据库。 确保使用之前创建的服务器管理员帐户。

重要

默认情况下,所有 Azure 服务都允许通过 SQL 数据库 IP 防火墙进行访问。 在此页上选择“关”可禁止所有 Azure 服务进行访问。

连接到数据库

使用 Azure Data Studio 建立与数据库的连接。

  1. 打开 Azure Data Studio。

  2. 在对象资源管理器的“新建连接”中创建新的连接并输入以下信息。 将其他选项保留为默认值。

    设置 建议值 说明
    连接类型 Microsoft SQL Server 此值是必需的。
    服务器名称 完全限定的 Azure SQL 数据库逻辑服务器名称 例如 your_logical_azure_sql_server.database.chinacloudapi.cn
    身份验证拼写错误 SQL Server 身份验证 使用 SQL Server 身份验证输入用户名和密码。
    Microsoft Entra 身份验证 若要使用 Microsoft Entra ID 进行连接,对于 Microsoft Entra 服务器管理员,请选择“Microsoft Entra ID - 支持 MFA 的通用方法”。 有关详细信息,请参阅使用 Azure SQL 配置和管理 Microsoft Entra 身份验证
    登录 服务器管理员帐户 在创建服务器时指定的帐户。
    密码 服务器管理员帐户的密码 创建服务器时指定的密码。

    ADS 中连接对话框的屏幕截图。

  3. 选择“连接”。 此时会在 ADS 中打开“对象资源管理器”窗口。

  4. 在对象资源管理器中展开“数据库”,然后展开 yourDatabase,查看示例数据库中的对象 。

  5. 在“对象资源管理器”中,右键单击 yourDatabase,并选择“新建查询”。 此时会打开一个空白查询窗口,该窗口连接到数据库。

在数据库中创建表

使用 Azure Data Studio 中的表设计器创建具有 4 个表格的数据库架构,这些表格是大专院校的学生管理系统的模型:

  • Person
  • Course
  • Student
  • Credit

以下关系图显示了这些表的相互关系。 其中一些表引用其他表中的列。 例如,Student 表引用 Person 表的 PersonId 列。 请研究此关系图,了解本教程中各种表的相互关系。 若要深入了解如何创建有效的规范化数据库表,请参阅设计规范化数据库。 有关如何选择数据类型的信息,请参阅 Data types(数据类型)。 默认情况下,表在默认 dbo 架构中创建,这意味着表的两部分名称将为 dbo.Person

表关系的屏幕截图。

  1. 在“对象资源管理器”中,选择 yourDatabase,随即会展开该数据库中存储的所有进程的下拉菜单,右键单击“表”文件夹,选择“新建表”。 此时会打开一个空白表设计器,该设计器连接到数据库。

  2. 使用表设计器接口在数据库中创建这四个表。 若要详细了解如何使用表设计器创建表,请参阅表设计器文档

    • Person 表

      表设计器中 Person 表的屏幕截图。

      请务必为 Person 表配置主键设置,如下所示:

      表设计器中 Person 表的屏幕截图,其中显示了主键设置。

    • Student 表

      表设计器中 Student 表的屏幕截图。

      请务必为 Student 表配置主键设置,如下所示:表设计器中 Student 表的屏幕截图,其中显示了主键设置。

      请务必为 Student 表配置外键设置,如下所示:表设计器中 Student 表的屏幕截图,其中显示了外键设置。

    • Course 表

      表设计器中 Course 表的屏幕截图。

      请务必为 Course 表配置主键设置,如下所示:表设计器中 Course 表的屏幕截图,其中显示了主键设置。

    • Credit 表

      表设计器中 Credit 表的屏幕截图。

      请务必为 Credit 表配置外键设置,如下所示:显示外键设置的表设计器中 Credit 表的屏幕截图。

      请务必为 Credit 表配置约束设置,如下所示:显示约束设置的表设计器中 Credit 表的屏幕截图。

    如果你更喜欢使用 T-SQL 创建四个新表,可以在新查询窗口中执行以下 T-SQL。

    -- Create Person table
    CREATE TABLE Person
    (
        PersonId INT IDENTITY PRIMARY KEY,
        FirstName NVARCHAR(128) NOT NULL,
        MiddelInitial NVARCHAR(10),
        LastName NVARCHAR(128) NOT NULL,
        DateOfBirth DATE NOT NULL
    )
    
    -- Create Student table
    CREATE TABLE Student
    (
        StudentId INT IDENTITY PRIMARY KEY,
        PersonId INT REFERENCES Person (PersonId),
        Email NVARCHAR(256)
    )
    
    -- Create Course table
    CREATE TABLE Course
    (
        CourseId INT IDENTITY PRIMARY KEY,
        Name NVARCHAR(50) NOT NULL,
        Teacher NVARCHAR(256) NOT NULL
    )
    
    -- Create Credit table
    CREATE TABLE Credit
    (
        StudentId INT REFERENCES Student (StudentId),
        CourseId INT REFERENCES Course (CourseId),
        Grade DECIMAL(5,2) CHECK (Grade <= 100.00),
        Attempt TINYINT,
        CONSTRAINT [UQ_studentgrades] UNIQUE CLUSTERED
        (
            StudentId, CourseId, Grade, Attempt
        )
    )
    
  3. 展开“对象资源管理器”中 yourDatabase 下的“”节点以查看创建的新表。

    ADS 中创建的表的屏幕截图。

将数据加载到表

  1. 在“下载”文件夹中创建名为 sampleData 的文件夹,为数据库存储示例数据。 例如 c:\Users\<your user name>\Downloads

  2. 右键单击以下链接并将它们保存到 sampleData 文件夹。

  3. 打开新的 Windows 命令提示符窗口并导航到 sampleData 文件夹。 例如 cd c:\Users\<your user name>\Downloads

  4. 执行以下 bcp 命令,将示例数据插入表,使用环境值替换“服务器”、“数据库”、“用户”和“密码”的值。

    bcp Course in SampleCourseData -S <server>.database.chinacloudapi.cn -d <database> -U <user> -P <password> -q -c -t ","
    bcp Person in SamplePersonData -S <server>.database.chinacloudapi.cn -d <database> -U <user> -P <password> -q -c -t ","
    bcp Student in SampleStudentData -S <server>.database.chinacloudapi.cn -d <database> -U <user> -P <password> -q -c -t ","
    bcp Credit in SampleCreditData -S <server>.database.chinacloudapi.cn -d <database> -U <user> -P <password> -q -c -t ","
    

现已将示例数据加载到了之前创建的表中。

查询数据

执行以下 T-SQL 查询,从数据库表中检索信息。

第一个查询将联接所有 4 个表,以查找由“Dominick Pope”授课的分数高于 75% 的学生。 在查询窗口中执行以下 T-SQL 查询:

-- Find the students taught by Dominick Pope who have a grade higher than 75%
SELECT  person.FirstName, person.LastName, course.Name, credit.Grade
FROM  Person AS person
    INNER JOIN Student AS student ON person.PersonId = student.PersonId
    INNER JOIN Credit AS credit ON student.StudentId = credit.StudentId
    INNER JOIN Course AS course ON credit.CourseId = course.courseId
WHERE course.Teacher = 'Dominick Pope'
    AND Grade > 75;

此查询将联接所有 4 个表,以查找“Noe Coleman”注册过的课程。 在查询窗口中执行以下 T-SQL 查询:

-- Find all the courses in which Noe Coleman has ever enrolled
SELECT  course.Name, course.Teacher, credit.Grade
FROM  Course AS course
    INNER JOIN Credit AS credit ON credit.CourseId = course.CourseId
    INNER JOIN Student AS student ON student.StudentId = credit.StudentId
    INNER JOIN Person AS person ON person.PersonId = student.PersonId
WHERE person.FirstName = 'Noe'
    AND person.LastName = 'Coleman';

提示

若要了解有关编写 SQL 查询的更多信息,请访问教程:编写 Transact-SQL 语句

提示

准备好开始开发 .NET 应用程序了吗? 此免费 Learn 模块介绍如何开发和配置可查询 Azure SQL 数据库的 ASP.NET 应用程序,包括创建简单数据库。

下一步

转向下一教程,了解如何使用 Visual Studio 和 C# 设计数据库。