通过


你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

教程:使用 Visual Studio Code 在 Azure SQL 数据库中设计关系数据库

适用于:Azure SQL 数据库

Azure SQL 数据库是Microsoft云(Azure)中的关系数据库即服务(DBaaS)。 本教程介绍如何使用 适用于 Visual Studio Code 的 Azure 门户和 MSSQL 扩展来:

  • 使用 Visual Studio Code 连接数据库
  • 使用 Visual Studio Code 创建表
  • 使用 BCP 批量加载数据
  • 使用 Visual Studio Code 查询数据

注释

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

先决条件

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

登录到 Azure 门户

登录到 Azure 门户

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

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

重要

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

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

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

    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 防火墙进行访问。 选择此页上的 OFF 可禁用所有 Azure 服务。

连接到数据库

使用 Visual Studio Code 的 MSSQL 扩展 建立与数据库的连接。

  1. 打开 Visual Studio Code。

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

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

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

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

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

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

在数据库中创建表

创建一个数据库架构,其中包含四个用于大学学生管理系统建模的表,并使用表设计器进行设计。

  • Person
  • Course
  • Student
  • Credit

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

表关系的屏幕截图。

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

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

    • 人员表

      表设计器中人员表的屏幕截图。

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

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

    • 学生表

      表设计器中学生表的屏幕截图。

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

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

    • 课程表

      表设计器中课程表的屏幕截图。

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

    • 信用表

      表设计器中信用表的屏幕截图。

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

      请务必配置 “信用额度 表”的“检查约束”设置,如下所示: 表设计器中“信用表”的屏幕截图,其中显示了“检查约束”设置。

    如果想要使用 T-SQL 创建四个新表,下面是在新查询窗口中执行的 T-SQL。

    -- Create Person table
    CREATE TABLE Person
    (
        PersonId INT IDENTITY PRIMARY KEY,
        FirstName NVARCHAR (128) NOT NULL,
        MiddleInitial NVARCHAR (10),
        LastName NVARCHAR (128) NOT NULL,
        DateOfBirth DATE NOT NULL
    );
    
    -- Create Student table
    CREATE TABLE Student
    (
        StudentId INT IDENTITY PRIMARY KEY,
        PersonId INT FOREIGN KEY 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 FOREIGN KEY REFERENCES Student (StudentId),
        CourseId INT FOREIGN KEY REFERENCES Course (CourseId),
        Grade DECIMAL (5, 2) CHECK (Grade <= 100.00),
        Attempt TINYINT,
        CONSTRAINT [UQ_studentgrades] UNIQUE CLUSTERED (StudentId, CourseId, Grade, Attempt)
    );
    
  3. 对象资源管理器中展开你的数据库下的节点,以查看你创建的四个新表。

    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.windows.net -d <database> -U <user> -P <password> -q -c -t ","
    bcp Person in SamplePersonData -S <server>.database.windows.net -d <database> -U <user> -P <password> -q -c -t ","
    bcp Student in SampleStudentData -S <server>.database.windows.net -d <database> -U <user> -P <password> -q -c -t ","
    bcp Credit in SampleCreditData -S <server>.database.windows.net -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 语句