DP-800 データベース ソリューションの設計と開発 問題演習 01

WEB問題集

DP800-DESIGN#1

Contoso は Azure SQL Database の 1 つのデータベースに、従業員情報を保持するテーブルを新規に作成します。メール アドレスと電話番号の形式は、アプリケーションではなくデータベース側で検証する方針です。

開発者が次のステートメントを実行したところ、「'REGEXP_LIKE' は認識されない組み込み関数名です。」というエラーが返りました。

CREATE TABLE dbo.Employees
(
    employee_id  INT IDENTITY (1, 1) PRIMARY KEY,
    email        VARCHAR (320)
        CHECK (REGEXP_LIKE (email, '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')),
    phone_number NVARCHAR (20)
        CHECK (REGEXP_LIKE (phone_number, '^(\d{3})-(\d{3})-(\d{4})$'))
);

正規表現による検証をこのステートメントのまま使用できるようにするには、どうすればよいですか。

ディスカッション 0
DP800-DESIGN#2

Contoso は Azure SQL Database の 1 つのデータベースで、注文をドキュメント形式で保持します。注文全体を 1 つの JSON ドキュメントとして 1 列に格納し、参照時にはスカラー値の取り出しと、明細の配列の表形式への展開の両方を行います。

CREATE TABLE dbo.Orders
(
    order_id   INT IDENTITY (1, 1) PRIMARY KEY,
    order_info {{BLANK1}} NOT NULL
);
GO

-- 顧客名を 1 つのスカラー値として取り出す
SELECT order_id,
       {{BLANK2}} (order_info, '$.customer.name') AS customer_name
FROM dbo.Orders;
GO

-- 明細の配列を行と列に展開する
SELECT o.order_id, d.sku, d.qty
FROM dbo.Orders AS o
     CROSS APPLY {{BLANK3}} (CAST (o.order_info AS NVARCHAR (MAX)), '$.items')
                 WITH (sku VARCHAR (20) '$.sku', qty INT '$.qty') AS d;

各空欄に当てはまるものを選択してください。

ステートメント 選択
BLANK1: 注文ドキュメントを格納する列のデータ型
BLANK2: パスで指定したスカラー値を 1 つ返す関数
BLANK3: JSON の配列を行と列に展開する関数
ディスカッション 0
DP800-DESIGN#3

Contoso は 1 つのデータベースの中で、性質の異なる 4 つのデータ セットを扱います。それぞれの要求に最も適したテーブルの種類を対応付けてください。

項目(ドラッグしてください)
  • テンポラル テーブル
  • グラフ テーブル
  • 台帳テーブル
  • メモリ最適化テーブル
行の変更履歴を期間で照会
    改ざんの有無を暗号学的に検証
      ノードとエッジの関係を照会
        高頻度の同時更新をロックなしで処理
          ディスカッション 0
          DP800-DESIGN#4

          Contoso は会員情報を保持するテーブルを新規に作成します。会員の氏名は日本語、タイ語、アラビア語など複数の言語で登録され、最大 100 文字まで許可しますが、実際の値は 20 文字前後が大半です。データベースの既定の照合順序は日本語向けのものです。

          開発者は次の定義を提案しました。

          CREATE TABLE dbo.Members
          (
              member_id INT IDENTITY (1, 1) NOT NULL PRIMARY KEY,
              full_name CHAR (100) NOT NULL,
              country   CHAR (2) NOT NULL,
              joined_at DATE NOT NULL
          );

          full_name 列の定義をどのように見直すべきですか。

          ディスカッション 0
          DP800-DESIGN#5
          クラスター化列ストア インデックスの物理的な格納を示す図。左側の列ストアには縦棒で表された圧縮済みの列セグメントが並び、右側には別枠でデルタストアが置かれている。デルタストアには、インデックスには含まれるがまだ列ストアへ圧縮されていない行が表の形で示されている。
          図: クラスター化列ストア インデックスの物理構造 — 圧縮された列セグメントとデルタストア 出典: Microsoft Learn — インデックスのアーキテクチャと設計ガイド

          Fabrikam の dbo.SalesHistory は 8 億行の履歴テーブルで、これまでは単一行の検索が中心でしたが、現在は集計を伴う分析クエリが大半を占めるようになりました。データベース管理者は、このテーブルをクラスター化列ストア インデックスへ移行し、夜間の一括ロードも継続できるようにします。

          次の操作を正しい順序に並べ替えてください。

          1. 一意検索用の非クラスター化インデックスを追加
          2. 既存の行ストア インデックスを棚卸し
          3. DROP_EXISTING で列ストアに置き換え
          4. 分析主体になったクエリの傾向を確認
          5. 一括ロードのバッチ サイズを調整
          ディスカッション 0