チュートリアル: Visual Studio Code を使用して Azure SQL Database でリレーショナル データベースを設計する

適用対象:Azure SQL データベース

Azure SQL Database は、Microsoft Cloud (Azure) のサービスとしてのリレーショナル データベース (DBaaS) です。 このチュートリアルでは、 Visual Studio Code 用 の Azure portal と MSSQL 拡張機能を使用して、次の操作を行う方法について説明します。

  • Visual Studio Code でデータベースに接続する
  • Visual Studio Code を使用してテーブルを作成する
  • BCP を使用してデータを一括で読み込む
  • Visual Studio Code を使用してデータのクエリを実行する

このチュートリアルでは、Azure SQL Database を使用しています。 エラスティック プールでプールされたデータベース、または SQL Managed Instance を使用することもできます。 SQL Managed Instance への接続については、次の SQL Managed Instance クイック スタートを参照してください。クイック スタート: Azure SQL Managed Instance に接続するように Azure VM を構成、クイック スタート: オンプレミスから Azure SQL Managed Instance へのポイント対サイト接続を構成します

[前提条件]

このチュートリアルを完了するには、以下がインストールされていることを確認します。

Azure portal にサインインする

Azure portal にサインインする

サーバーレベルの IP ファイアウォール規則を作成する

Azure SQL Database では、サーバーレベルで IP ファイアウォールが作成されます。 このファイアウォールにより、外部のアプリケーションやツールは、ファイアウォール規則でその IP がファイアウォールの通過を許可されていない限り、サーバーおよびサーバー上のすべてのデータベースに接続できなくなります。 データベースに外部から接続できるようにするには、まず、IP アドレス (または IP アドレス範囲) に対する IP ファイアウォール規則を追加する必要があります。 以下の手順に従って、サーバーレベルの IP ファイアウォール規則を作成します。

Important

Azure SQL Database の通信は、ポート 1433 上で行われます。 企業ネットワーク内からこのサービスに接続しようとしている場合は、ポート 1433 経由の送信トラフィックがネットワークのファイアウォールで許可されていない可能性があります。 その場合、管理者がポート 1433 を開かない限り、データベースに接続できません。

  1. デプロイが完了したら、Azure portal メニューから [SQL データベース] を選択するか、または任意のページから [SQL データベース] を検索して選択します。

  2. [SQL データベース] ページで [yourDatabase] を選択します。 データベースの概要ページが開き、完全修飾 [サーバー名] (contosodatabaseserver01.database.windows.net など) が表示され、それ以上の構成のためのオプションが提供されます。

    Azure portal の [データベースの概要] ページのスクリーンショット。サーバー名が強調表示されています。

  3. この完全修飾サーバー名をコピーします。これは、SQL Server Management Studio からお客様のサーバーとデータベースに接続するために使用します。

  4. [設定] で、 [ネットワーク] を選択します。 [パブリック アクセス] タブを選択し、[パブリック ネットワーク アクセス][選択したネットワーク] を選択して、[ファイアウォール規則] セクションを表示します。

    サーバー レベルの IP ファイアウォール規則を設定する場所を示す Azure portal の [ネットワーク] ページのスクリーンショット。

  5. ツール バーの [クライアント IPv4 の追加] をクリックし、現在の IP アドレスを新しい IP ファイアウォール規則に追加します。 IP ファイアウォール規則は、単一の IP アドレスまたは IP アドレスの範囲に対して、ポート 1433 を開くことができます。

  6. 保存を選びます。 サーバーでポート 1433 を開いている現在の IP アドレスに対して、サーバーレベルの IP ファイアウォール規則が作成されます。

  7. [OK] を選択し、 [ファイアウォール設定] ページを閉じます。

これで IP アドレスが IP ファイアウォールを通過できるようになりました。 SQL Server Management Studio やその他の任意のツールを使用して、データベースに接続できます。 必ず、お客様が先ほど作成したサーバー管理者アカウントを使用してください。

Important

既定では、すべての Azure サービスで、SQL Database IP ファイアウォール経由のアクセスが有効になります。 すべての Azure サービスで無効にするには、このページで [オフ] を選択します。

データベースに接続する

Visual Studio Code の MSSQL 拡張機能を使用して、データベースへの接続を確立します。

  1. Visual Studio Code を開きます。

  2. オブジェクト エクスプローラーの [新しい接続 ] で新しい接続を作成し、次の情報を入力します。 他のオプションは既定値のままにします。

    Setting 推奨値 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 サポート付きユニバーサル] を選択します。 詳細については、Azure SQL による Microsoft Entra 認証の構成と管理を参照してください。
    ログイン サーバー管理者アカウント サーバーの作成時に指定したアカウントです。
    パスワード サーバー管理者アカウントのパスワード お客様がサーバーを作成したときに指定したパスワードです。

    ADS の [接続] ダイアログ ボックスのスクリーンショット。

  3. 接続を選択します。 ADS でオブジェクト エクスプローラー ウィンドウが開きます。

  4. オブジェクト エクスプローラーで、DatabasesyourDatabase の順に展開して、サンプル データベース内のオブジェクトを表示します。

  5. オブジェクト エクスプローラーyourDatabase を右クリックし、 [新しいクエリ] を選択します。 データベースに接続された空のクエリ ウィンドウが開きます。

データベースのテーブルを作成する

テーブル デザイナーを使用して、大学の学生管理システムをモデル化する 4 つのテーブルを含むデータベース スキーマを作成します。

  • Person
  • Course
  • Student
  • Credit

次の図は、これらのテーブルの相互関係を示しています。 テーブルの一部は、他のテーブル内の列を参照します。 たとえば Student テーブルは、PersonId テーブルの Person 列を参照します。 このチュートリアルのテーブルの相互関係を把握するため、図を詳しく確認します。 有効な正規化されたデータベース テーブルを作成する方法の詳細については、「正規化されたデータベースの設計」を参照してください。 データ型の選択については、データ型を参照してください。 既定では、テーブルは既定のdbo スキーマに作成されます。つまり、たとえば、テーブルの 2 部構成の名前は dbo.Person となります。

テーブル リレーションシップのスクリーンショット。

  1. オブジェクト エクスプローラーで、このデータベースに格納されているすべてのプロセスのドロップダウン メニューを展開する yourDatabase を選択し、[テーブル] フォルダーを右クリックし、[新しいテーブル] を選択します。 データベースに接続されている空のテーブル デザイナーが開きます。

  2. テーブル デザイナー インターフェイスを使用して、データベースにこれらの 4 つのテーブルを作成します。 テーブル デザイナーを使用したテーブルの作成の詳細については、「 テーブル デザイナー」を参照してください。

    • 人物テーブル

      テーブル デザイナーの Person テーブルのスクリーンショット。

      次に示すように、 必ず Person テーブルの主キー設定を構成してください。

      主キーの設定を示すテーブル デザイナーの Person テーブルのスクリーンショット。

    • 学生テーブル

      テーブル デザイナーの Student テーブルのスクリーンショット。

      次に示すように、 Student テーブルの主キー設定を構成してください。主 キーの設定を示すテーブル デザイナーの Student テーブルのスクリーンショット。

      次に示すように、 Student テーブルの外部キー設定を構成してください。テーブル デザイナーの Student テーブルのスクリーンショット。外部キーの設定が表示されています。

    • 講座一覧

      テーブル デザイナーの Course Table のスクリーンショット。

      次に示すように、 コース テーブルの主キー設定を必ず構成してください。 主キーの設定を示すテーブル デザイナーの Course テーブルのスクリーンショット。

    • クレジット テーブル

      テーブル デザイナーのクレジット テーブルのスクリーンショット。

      次に示すように、 クレジット テーブルの外部キー設定を必ず構成してください。 外部キーの設定を示すテーブル デザイナーのクレジット テーブルのスクリーンショット。

      次に示すように、 クレジット テーブルの制約のチェック設定を構成してください。テーブル デザイナーの [制約の確認] 設定を示すクレジット テーブルのスクリーンショット。

    T-SQL を使用して 4 つの新しいテーブルを作成する場合は、新しいクエリ ウィンドウで実行する 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. オブジェクト エクスプローラーで、yourDatabaseTables ノードを展開すると、作成した新しいテーブルが 4 つ表示されます。

    ADS で作成されたテーブルのスクリーンショット。

テーブルにデータを読み込む

  1. ローカル ワークステーション Downloads フォルダーに sampleData という名前のフォルダーを作成し、データベース用のサンプル データを格納します。 たとえば、「 c:\Users\<your user name>\Downloads 」のように入力します。

  2. 次のリンクを右クリックし、それらを sampleData フォルダーに保存します。

  3. 新しい Windows コマンド プロンプト ウィンドウを開き、sampleData フォルダーに移動します。 たとえば、「 cd c:\Users\<your user name>\Downloads 」のように入力します。

  4. 次の bcp コマンドを実行して、サンプル データをテーブルに挿入します。serverdatabaseuserpassword の各値は、お客様の環境の値に置き換えてください。

    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 ステートメントの作成」にアクセスしてください。