このクイック スタートでは、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 の応答の強化に関するアイデアを共有します。
関連コンテンツ
- Visual Studio Code 用 MSSQL 拡張機能のための GitHub Copilot
- クイック スタート: チャットとインライン GitHub Copilot の提案を使用する (プレビュー)
- クイック スタート: コードの生成 (プレビュー)
- クイック スタート: スキーマ エクスプローラーとデザイナーを使用する (プレビュー)
- クイック スタート: スマート クエリ ビルダーを使用する (プレビュー)
- クイック スタート: クエリ オプティマイザー アシスタント (プレビュー)
- クイック スタート: Security Analyzer (プレビュー)
- クイック スタート: ローカライズと書式設定ヘルパー (プレビュー)
- クイック スタート: テストとモック作成のためにデータを生成する (プレビュー)
- 制限事項と既知の問題