Sdílet prostřednictvím


Rychlý start: Použití business logic explaineru (Preview)

V tomto rychlém startu se dozvíte, jak business logic Explainer pomáhá vývojářům pochopit a pracovat s komplexní aplikační logikou implementovanou v architekturách SQL, ORM (Object-Relational Mapování) nebo přímo v databázi. Pomocník analyzuje kód SQL, modely ORM nebo existující schémata databáze, aby vysvětlil podkladová obchodní pravidla a poskytl dokumentaci s možností akce.

Začínáme

Ujistěte se, že jste připojení k databázi a máte otevřené okno aktivního editoru s rozšířením MSSQL. Toto připojení umožňuje účastníkovi @mssql chatu porozumět kontextu vašeho databázového prostředí a umožnit přesné a kontextové návrhy. Bez připojení k databázi nebude účastník chatu mít schéma ani datový kontext, aby poskytoval smysluplné odpovědi.

Následující příklady používají AdventureWorksLT2022 ukázkovou databázi, kterou si můžete stáhnout z domovské stránky Ukázky microsoft SQL Serveru a projekty komunity .

Nejlepších výsledků dosáhnete, když upravíte názvy tabulek a schémat tak, aby odpovídaly vašemu vlastnímu prostředí.

Ujistěte se, že chat obsahuje předponu @mssql . Například zadejte @mssql svůj dotaz nebo výzvu. Tím zajistíte, že účastník chatu pochopí, že žádáte o pomoc související s SQL.

Principy obchodní logiky pomocí GitHub Copilotu

GitHub Copilot vám pomůže pochopit a vysvětlit obchodní pravidla vložená do databázového kódu, modelů ORM a aplikačních dotazů. Z uložených procedur až po dotazy LINQ a výrazy Sequelize poskytuje GitHub Copilot přehledy přirozeného jazyka, aby byla složitější logika přístupnější.

Tady jsou běžné případy použití a příklady toho, co se můžete zeptat prostřednictvím účastníka chatu:

Vysvětlení logiky T-SQL

Pomocí GitHub Copilotu můžete pochopit a vysvětlit logiku T-SQL, od uložených procedur po vložené podmíněné příkazy. Bez ohledu na to, jestli kontrolujete pravidla slev, procedurální logiku nebo podmínky optimalizace, může GitHub Copilot analyzovat a dokumentovat obchodní pravidla implementovaná v T-SQL.

  • Vysvětlete, co uložená procedura SalesLT.uspGetCustomerOrderHistory dělá, a navrhněte způsoby, jak ji optimalizovat.
  • Ladění uložené procedury SalesLT.uspGetTopSellingProducts a navržení vylepšení.
  • Analyzujte následující SQL fragment kódu z aktuální databáze. Zdokumentujte obchodní pravidla implementovaná v tomto procesu uplatnění slev, včetně podmínek způsobilosti, úprav diskontní sazby a jakýchkoli omezení stanovených pro částku slevy. V případě potřeby také poskytněte užitečné přehledy nebo návrhy ke zlepšení přehlednosti nebo výkonu.
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;

Vysvětlení logiky ORM

  • Vysvětlete, co dělá následující dotaz 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)
)
  • Co tento dotaz LINQ entity Framework dělá? Popište, jak seskupuje zákazníky podle úrovně na základě jejich celkových nákupů.
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"
    });
  • Analyzujte logiku tohoto dotazu Prisma a vysvětlete, jak určuje, které produkty se považují za "nízké skladové zásoby".
const lowInventoryProducts = await prisma.product.findMany({
  where: {
    SafetyStockLevel: {
      lt: 50
    }
  },
  select: {
    ProductID: true,
    Name: true,
    SafetyStockLevel: true
  }
});
  • Zkontrolujte a vysvětlete, co tento dotaz Sequelize dělá. Přidejte vložené komentáře, abyste objasnili, jak vypočítá celkové výnosy za zákazníka a filtruje zákazníky s významnými výdaji:
const results = await SalesOrderHeader.findAll({
  attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
  group: ['CustomerID'],
  having: sequelize.literal('SUM(TotalDue) > 5000')
});
  • Pomocí SQLAlchemy vygenerujte dotaz pro výpis produktů, které nebyly nikdy seřazeny, a požádejte GitHub Copilot, aby vysvětlil logiku spojení a chování filtrování.

  • V prisma napište dotaz, který načte zákazníky, kteří zadali objednávku za posledních 30 dnů. Vysvětlete, co dělá následující dotaz Prisma. Přidejte vložené komentáře, abyste si vysvětlili, jak funguje filtrování kalendářních dat a jak se určují poslední objednávky:

Vysvětlení obchodního záměru prostřednictvím dotazů

GitHub Copilot pomáhá vývojářům pochopit, jak funguje dotaz, ale proč existuje. To zahrnuje skutečný účel filtrů dat, seskupení a agregací. Tato vysvětlení jsou obzvláště užitečná během procesu zaškolení, protože umožňují vývojářům pochopit cíle sestav, logických operací nebo systémových metrik vložených do kódu SQL a ORM.

  • Popište obchodní cíl následujícího dotazu SQL. Jaký poznatek se snaží odhalit?
SELECT TOP 10 CustomerID,
              COUNT(*) AS OrderCount
FROM SalesLT.SalesOrderHeader
GROUP BY CustomerID
ORDER BY OrderCount DESC;
  • Shrňte, čeho má tento dotaz dosáhnout z obchodní perspektivy.
SELECT ProductID,
       SUM(LineTotal) AS TotalSales
FROM SalesLT.SalesOrderDetail
GROUP BY ProductID
HAVING SUM(LineTotal) > 10000;
  • Analyzujte uloženou proceduru SalesLT.uspGetCustomerOrderHistory a popište obchodní logiku, která implementuje.

  • Vysvětlete tento dotaz LINQ entity Framework a popište, jakou obchodní logiku implementuje:

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();
  • Použijte Sequelize, vysvětlete, co tento dotaz provádí, a popište obchodní předpoklady, které zahrnuje.
const customerRevenue = await SalesOrderHeader.findAll({
  attributes: ['CustomerID', [sequelize.fn('SUM', sequelize.col('TotalDue')), 'TotalSpent']],
  group: ['CustomerID'],
  having: sequelize.literal('SUM(TotalDue) > 5000')
});

Zpětná vazba: Vysvětlení obchodní logiky

Pokud nám chcete pomoct upřesnit a vylepšit GitHub Copilot pro rozšíření MSSQL, odešlete zpětnou vazbu pomocí následující šablony problému Na GitHubu: Váš názor na GitHub Copilot

Při odesílání zpětné vazby zvažte následující:

  • Otestované scénáře – Dejte nám vědět, na které oblasti jste se zaměřili, například na vytváření schématu, generování dotazů, zabezpečení, lokalizaci.

  • Co dobře fungovalo – popište všechny zážitky, které se cítily hladce, užitečné nebo překročily vaše očekávání.

  • Problémy nebo chyby – Zahrňte všechny problémy, nekonzistence nebo matoucí chování. Snímky obrazovky nebo nahrávky obrazovky jsou užitečné hlavně.

  • Návrhy ke zlepšení – Sdílejte nápady na zlepšení použitelnosti, rozšíření pokrytí nebo vylepšení odpovědí GitHub Copilotu.