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

适用于:Azure SQL Database

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

  • 使用 Visual Studio Code 连接到数据库
  • 使用 Visual Studio Code 创建表
  • 使用 BCP 工具进行大容量数据加载
  • 使用Visual Studio Code查询数据

注释

在本教程中,我们将使用Azure SQL Database。 还可以在弹性池或SQL Managed Instance中使用共用数据库。 有关连接到 SQL 托管实例,请参阅以下 SQL 托管实例快速入门:快速入门:配置 Azure 虚拟机以连接到 Azure SQL 托管实例快速入门:从本地配置点到站点连接到 Azure SQL 托管实例

先决条件

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

登录到 Azure 门户

登录到 Azure 门户

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

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

重要

Azure SQL Database通过端口 1433 进行通信。 如果尝试从企业网络内部连接到此服务,则网络防火墙可能不允许通过端口 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 服务。

连接到数据库

使用 MSSQL 扩展 在 Visual Studio Code 中连接到您的数据库。

  1. 打开Visual Studio Code。

  2. New Connection Object Explorer 中创建新连接并输入以下信息。 将其他选项保留为默认值。

    设置 建议值 说明
    连接类型 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 的通用。 有关详细信息,请参阅 配置和管理 Microsoft Entra 身份验证与 Azure SQL
    登录 服务器管理员帐户 在创建服务器时指定的帐户。
    密码 服务器管理员帐户的密码 创建服务器时指定的密码。

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

  3. 选择 连接Object Explorer 窗口将在 ADS 中打开。

  4. Object Explorer 中,展开 Databases,然后展开 yourDatabase 以查看示例数据库中的对象。

  5. Object Explorer 中,右键单击 yourDatabase并选择 New Query。 此时会打开一个空白查询窗口,该窗口连接到数据库。

在数据库中创建表

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

  • Person
  • Course
  • Student
  • Credit

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

表关系的屏幕截图。

  1. Object Explorer 中, 选择 yourDatabase 展开此数据库中存储的所有进程的下拉菜单,右键单击 Tables 文件夹,选择 New Table。 此时会打开一个空白表设计器,该设计器连接到数据库。

  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. Object Explorer中展开yourDatabase下的Tables节点,以查看您创建的四个新表。

    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 查询,请访问 Tutorial:编写Transact-SQL语句