次の方法で共有


クイックスタート: ビジネスロジック解説ツールを使用する (プレビュー)

このクイック スタートでは、Business Logic Explainer を使用して、SQL、ORM (Object-Relational Mapping) フレームワーク、またはデータベースに直接実装された複雑なアプリケーション ロジックを開発者が理解して操作する方法について説明します。 アシスタントは、SQL コード、ORM モデル、または既存のデータベース スキーマを分析して、基になるビジネス ルールを説明し、実用的なドキュメントを提供します。

始めましょう

データベースに接続されていて、MSSQL 拡張機能でアクティブなエディター ウィンドウが開かれていることを確認します。 この接続により、 @mssql チャット参加者はデータベース環境のコンテキストを理解できるため、正確でコンテキストに対応した提案が可能になります。 データベース接続がないと、チャット参加者は意味のある応答を提供するスキーマまたはデータ コンテキストを持ちません。

次の例では、 AdventureWorksLT2022 サンプル データベースを使用します。このデータベースは、 Microsoft SQL Server サンプルとコミュニティ プロジェクト のホーム ページからダウンロードできます。

最適な結果を得るには、独自の環境に合わせてテーブル名とスキーマ名を調整します。

チャットに @mssql プレフィックスが含まれていることを確認します。 たとえば、「 @mssql 」と入力し、その後に質問またはプロンプトを入力します。 これにより、チャット参加者は、SQL 関連のサポートを求めていることを理解できます。

GitHub Copilot を使用してビジネス ロジックを理解する

GitHub Copilot は、データベース コード、ORM モデル、およびアプリケーション クエリに埋め込まれているビジネス ルールを理解し、説明するのに役立ちます。 ストアド プロシージャから LINQ クエリ、続編式まで、GitHub Copilot は自然言語の分析情報を提供し、複雑なロジックのアクセシビリティを高めます。

チャット参加者から質問できる一般的なユース ケースと例を次に示します。

T-SQL ロジックの説明

GitHub Copilot を使用して、ストアド プロシージャからインライン条件ステートメントまで、T-SQL ロジックを理解して説明します。 割引ルール、手続きロジック、最適化条件のいずれを確認する場合でも、GitHub Copilot は T-SQL に実装されているビジネス ルールを分析して文書化できます。

  • SalesLT.uspGetCustomerOrderHistory ストアド プロシージャの機能を説明し、それを最適化する方法を提案します。
  • SalesLT.uspGetTopSellingProducts ストアド プロシージャをデバッグし、改善を提案します。
  • 現在のデータベースから次の SQL コード スニペットを分析します。 適格性の条件、割引率の調整、割引額に課される制限など、この割引適用プロセスで実装されているビジネス ルールを文書化します。 また、アクションにつながる分析情報や提案を提供して、必要に応じて明確さやパフォーマンスを向上させます。
DECLARE @OrderTotal AS DECIMAL (10, 2) = 1500.00;
DECLARE @DiscountCode AS NVARCHAR (20) = 'DISCOUNT10';
DECLARE @DiscountPct AS DECIMAL (5, 2) = CASE WHEN @OrderTotal > 1000.00 THEN 5.0 ELSE 0.0 END;

IF @DiscountCode = 'DISCOUNT10'
    BEGIN
        SET @DiscountPct = CASE WHEN @DiscountPct < 10.0 THEN 10.0 ELSE @DiscountPct END;
    END

DECLARE @DiscountAmount AS DECIMAL (10, 2) = (@OrderTotal * @DiscountPct / 100.0);

IF @DiscountAmount > 200.00
    BEGIN
        SET @DiscountAmount = 200.00;
    END

SELECT @OrderTotal AS OrderTotal,
       @DiscountPct AS DiscountPercentage,
       @DiscountAmount AS DiscountAmount;

ORM ロジックについて説明する

  • 次の SQLAlchemy クエリの機能について説明します。
from sqlalchemy import func

top_customers = (
    session.query(SalesOrderHeader.CustomerID, func.count().label("OrderCount"))
    .group_by(SalesOrderHeader.CustomerID)
    .order_by(func.count().desc())
    .limit(10)
)
  • この Entity Framework LINQ クエリは何を行いますか? 購入の合計に基づいて階層別に顧客をグループ化する方法について説明します。
var customerTiers = context.SalesOrderHeaders
    .GroupBy(o => o.CustomerID)
    .Select(g => new {
        CustomerID = g.Key,
        TotalSpent = g.Sum(o => o.TotalDue),
        Tier = g.Sum(o => o.TotalDue) >= 10000 ? "Gold" :
               g.Sum(o => o.TotalDue) >= 5000 ? "Silver" : "Bronze"
    });
  • この Prisma クエリのロジックを分析し、どの製品が "低在庫" と見なされるかを判断する方法を説明します。
const lowInventoryProducts = await prisma.product.findMany({
  where: {
    SafetyStockLevel: {
      lt: 50
    }
  },
  select: {
    ProductID: true,
    Name: true,
    SafetyStockLevel: true
  }
});
  • この続編クエリの機能を確認して説明します。 インライン コメントを追加して、顧客ごとの総収益を計算する方法と、多額の支出を持つ顧客にフィルターを適用する方法を明確にします。
const results = await SalesOrderHeader.findAll({
  attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
  group: ['CustomerID'],
  having: sequelize.literal('SUM(TotalDue) > 5000')
});
  • SQLAlchemy を使用して、一度も注文されていない製品を一覧表示するクエリを生成し、GitHub Copilot に結合ロジックとフィルター処理の動作について説明するよう依頼します。

  • Prisma で、過去 30 日間に注文した顧客を取得するクエリを記述します。 次の Prisma クエリの機能について説明します。 インライン コメントを追加して、日付のフィルター処理のしくみと最近の注文の決定方法を明確にします。

クエリを使用してビジネスの意図を理解する

GitHub Copilot は、開発者がクエリのしくみだけでなく、それが存在する理由を理解するのに役立ちます。 これには、データ フィルター、グループ化、集計の背後にある実際の目的が含まれます。 これらの説明は、オンボード時に特に役立ちます。開発者は、SQL および ORM コードに埋め込まれたレポート、ロジック ゲート、またはシステム メトリックの背後にある目標を把握できます。

  • 次の SQL クエリのビジネス目標について説明します。 どのような分析情報を表示しようとしていますか?
SELECT TOP 10 CustomerID,
              COUNT(*) AS OrderCount
FROM SalesLT.SalesOrderHeader
GROUP BY CustomerID
ORDER BY OrderCount DESC;
  • ビジネスの観点から、このクエリの目的を要約します。
SELECT ProductID,
       SUM(LineTotal) AS TotalSales
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > 10000;
  • SalesLT.uspGetCustomerOrderHistory ストアド プロシージャを分析し、実装するビジネス ロジックを記述します。

  • この Entity Framework LINQ クエリについて説明し、実装するビジネス ロジックについて説明します。

var highValueCustomers = context.SalesOrderHeaders
    .Where(o => o.TotalDue > 1000)
    .GroupBy(o => o.CustomerID)
    .Select(g => new { CustomerID = g.Key, OrderCount = g.Count() })
    .OrderByDescending(x => x.OrderCount)
    .Take(10)
    .ToList();
  • Sequelizeを使用して、このクエリの機能について説明し、ビジネス上の前提条件について説明します。
const customerRevenue = await SalesOrderHeader.findAll({
  attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
  group: ['CustomerID'],
  having: sequelize.literal('SUM(TotalDue) > 5000')
});

フィードバック: ビジネス ロジック 解説

MSSQL 拡張機能の GitHub Copilot を改良および改善するために、次の GitHub 問題テンプレートを使用してフィードバックを送信します。 GitHub Copilot フィードバック

フィードバックを送信する場合は、次の内容を検討してください。

  • テスト済みのシナリオ – スキーマの作成、クエリの生成、セキュリティ、ローカライズなど、どの領域に重点を置いたかをお知らせください。

  • うまくいったこと - スムーズで役に立ち、期待を超えた経験について説明します。

  • 問題またはバグ – 問題、不整合、または混乱を招く動作を含めます。 スクリーンショットや画面の記録は特に役立ちます。

  • 改善の提案 – 使いやすさの向上、カバレッジの拡大、GitHub Copilot の応答の強化に関するアイデアを共有します。