Поделиться через


Краткое руководство: Использование инструмента объяснения бизнес-логики

В этом кратком руководстве вы узнаете, как инструмент для объяснения бизнес-логики помогает разработчикам понять и работать со сложной логикой приложения, реализованной с использованием SQL, ORM (Object-Relational Mapping) фреймворков, или непосредственно в базе данных. Помощник анализирует код SQL, модели ORM или существующие схемы баз данных, чтобы объяснить базовые бизнес-правила и предоставить практическую документацию.

Начало работы

Убедитесь, что вы подключены к базе данных и открываете активное окно редактора с расширением MSSQL. Это подключение позволяет участнику чата @mssql понять контекст вашей среды базы данных, обеспечивая точные предложения с учетом контекста. Без подключения к базе данных участник чата не будет иметь контекст схемы или данных для предоставления значимых ответов.

В следующих примерах используется образец базы данных AdventureWorksLT2022, доступный для загрузки на домашней странице проектов сообщества и примеров Microsoft SQL Server.

Для получения наилучших результатов настройте имена таблиц и схем в соответствии с собственной средой.

Убедитесь, что чат включает @mssql префикс. Например, введите @mssql, а затем ваш вопрос или запрос. Это гарантирует, что участник чата понимает, что вы запрашиваете помощь, связанную с SQL.

Общие сведения о бизнес-логике с помощью GitHub Copilot

GitHub Copilot поможет вам понять и объяснить бизнес-правила, внедренные в код базы данных, модели ORM и запросы приложений. GitHub Copilot предоставляет информацию на естественном языке о хранимых процедурах, запросах LINQ и выражениях Sequelize, чтобы сделать сложную логику более доступной.

Ниже приведены распространенные варианты использования и примеры того, что можно спросить через участника чата:

Объяснить логику T-SQL

Используйте GitHub Copilot для понимания и объяснения логики Transact-SQL (T-SQL), от хранимых процедур до встроенных условных инструкций. Независимо от того, просматриваете ли вы правила скидки, процедурную логику или условия оптимизации, GitHub Copilot может анализировать и документировать бизнес-правила, реализованные в T-SQL.

Объяснение хранимой процедуры

Explain what the `SalesLT.uspGetCustomerOrderHistory` stored procedure does and suggest ways to optimize it.

Отладка хранимой процедуры

Debug the `SalesLT.uspGetTopSellingProducts` stored procedure and suggest improvements.

Описание бизнес-логики в фрагменте кода

Analyze the following SQL code snippet from my current database. Document the business rules implemented in this discount application process, including conditions for eligibility, discount rate adjustments, and any limits imposed on the discount amount. Also, provide actionable insights or suggestions to improve clarity or performance if necessary.

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

Explain what the following SQLAlchemy query does:

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

What does this Entity Framework LINQ query do? Describe how it groups customers by tier based on their total purchases.

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

Analyze the logic of this Prisma query and explain how it determines which products are considered "low inventory".

const lowInventoryProducts = await prisma.product.findMany({
  where: {
    SafetyStockLevel: {
      lt: 50
    }
  },
  select: {
    ProductID: true,
    Name: true,
    SafetyStockLevel: true
  }
});

Объясните и закомментируйте запрос sequelize

Review and explain what this Sequelize query does. Add inline comments to clarify how it calculates total revenue per customer and filters for customers with significant spending:

const results = await SalesOrderHeader.findAll({
  attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
  group: ['CustomerID'],
  having: sequelize.literal('SUM(TotalDue) > 5000')
});

Создание запроса SQLAlchemy для списка продуктов

Using SQLAlchemy, generate a query to list products that have never been ordered and ask GitHub Copilot to explain the join logic and filtering behavior.

Получение сведений о клиентах с помощью запроса Prisma

In Prisma, write a query that retrieves customers who placed an order in the last 30 days. Explain what the following Prisma query does. Add inline comments to clarify how the date filtering works and how recent orders are determined:

Понимание бизнес-намерений через запросы

GitHub Copilot помогает разработчикам понять не только то, как работает запрос, но и почему он существует. Это объяснение включает в себя реальное назначение фильтров данных, группирования и агрегирования. Эти объяснения особенно полезны во время подключения, что позволяет разработчикам понять цели, отчеты, шлюзы логики или системные метрики, внедренные в код SQL и ORM.

Описание бизнес-целей в запросе T-SQL

Describe the business goal of the following SQL query. What insight is it trying to surface?

SELECT TOP 10 CustomerID,
              COUNT(*) AS OrderCount
FROM SalesLT.SalesOrderHeader
GROUP BY CustomerID
ORDER BY OrderCount DESC;

Сводка намерений запроса T-SQL

Summarize what this query is intended to achieve from a business perspective.

SELECT ProductID,
       SUM(LineTotal) AS TotalSales
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > 10000;

Описание бизнес-логики в хранимой процедуре

Analyze the `SalesLT.uspGetCustomerOrderHistory` stored procedure and describe the business logic it implements.

Объяснение бизнес-логики в запросе Entity Framework LINQ

Explain this Entity Framework LINQ query and describe what business logic it implements:

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

Using Sequelize, explain what this query does and describe any business assumptions it makes:

const customerRevenue = await SalesOrderHeader.findAll({
  attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
  group: ['CustomerID'],
  having: sequelize.literal('SUM(TotalDue) > 5000')
});

Оставьте свой отзыв

Чтобы помочь нам уточнить и улучшить GitHub Copilot для расширения MSSQL, используйте следующий шаблон проблемы GitHub для отправки отзывов: GitHub Copilot Feedback

При отправке отзывов рассмотрите возможность включения:

  • Сценарии, проверенные . Сообщите нам, какие области вы сосредоточены, например создание схемы, создание запросов, безопасность, локализация.

  • То, что работало хорошо – Опишите любые ситуации, которые казались бесперебойными, полезными или превысили ваши ожидания.

  • Проблемы или ошибки — включает любые проблемы, несоответствия или запутанное поведение. Снимки экрана или записи экрана особенно полезны.

  • Предложения по улучшению — предоставление общих идей для улучшения удобства использования, расширения охвата или повышения ответов GitHub Copilot.