Skapa vyer
Vyer förenklar hur du kommer åt och presenterar data i SQL Server. Som SQL-utvecklare skapar du vyer för att kapsla in komplexa frågor, tillhandahålla säkerhetsgränser och presentera data i ett format som matchar programmets behov.
Förstå vyer i SQL Server
En visning är en virtuell tabell som baseras på en SELECT-instruktion. Till skillnad från fysiska tabeller lagrar vyer inte själva data. I stället hämtar de data från underliggande tabeller varje gång du frågar efter dem.
Med vyer kan du dölja komplexiteten i JOIN satser, beräkningar och filter från programkod. Om ditt program till exempel ofta behöver kundorder med produktinformation kan du skapa en vy som används JOIN i tabellerna Kunder, Beställningar och Produkter. Ditt program frågar sedan en enda vy i stället för att skriva samma komplex JOIN upprepade gånger.
Vyer ger också ett säkerhetsskikt. Du kan ge användare åtkomst till specifika kolumner via en vy samtidigt som du begränsar åtkomsten till de underliggande tabellerna. Med den här metoden kan du bara exponera de data som användarna behöver utan att ge dem fullständig tabellåtkomst.
Skapa en grundläggande vy
Du skapar en vy med instruktionen CREATE VIEW följt av en SELECT fråga. Vydefinitionen avgör vilka data som visas när du begär vyn.
Här är en enkel vy som kombinerar kund- och orderinformation:
CREATE VIEW Sales.CustomerOrders
AS
SELECT
c.CustomerID,
c.CustomerName,
c.Email,
o.OrderID,
o.OrderDate,
o.TotalAmount
FROM Sales.Customers c
INNER JOIN Sales.Orders o ON c.CustomerID = o.CustomerID;
När du har skapat den här vyn kan du fråga den som vilken tabell som helst:
SELECT * FROM Sales.CustomerOrders
WHERE CustomerName = 'Contoso Ltd';
Vyn kör den underliggande SELECT-instruktionen och returnerar resultat som om de kom från en enda tabell. Den här förenklingen gör programkoden renare och enklare att underhålla.
Du kan också skapa vyer med beräknade kolumner. I följande vy läggs en kolumn som kategoriserar beställningar efter storlek:
CREATE VIEW Sales.OrderSummary
AS
SELECT
OrderID,
CustomerID,
OrderDate,
TotalAmount,
CASE
WHEN TotalAmount < 100 THEN 'Small'
WHEN TotalAmount < 1000 THEN 'Medium'
ELSE 'Large'
END AS OrderSize
FROM Sales.Orders;
Den här vyn hanterar kategoriseringslogik på ett och samma ställe. Varje fråga mot OrderSummary får samma beräkning utan att duplicera uttrycket CASE .
Tillämpa designöverväganden
När du utformar vyer bör du tänka på hur de ska användas och underhållas. Väl utformade vyer balanserar enkelhet, prestanda och säkerhet.
Ange kolumnnamn explicit i stället för att använda SELECT *. Explicita kolumner gör vyerna mer underhållsbara och förhindrar oväntade resultat när underliggande tabeller ändras. Om någon lägger till en kolumn i en bastabell förblir din vydefinition konsekvent:
CREATE VIEW Sales.ActiveCustomers
AS
SELECT
CustomerID,
CustomerName,
Email,
Phone
FROM Sales.Customers
WHERE IsActive = 1;
Använd - WITH CHECK OPTION satsen när vyer hanterar dataändringar. Det här alternativet säkerställer att INSERT och UPDATE -instruktioner via vyn endast påverkar rader som visas i vyn:
CREATE VIEW Sales.HighValueOrders
AS
SELECT
OrderID,
CustomerID,
OrderDate,
TotalAmount
FROM Sales.Orders
WHERE TotalAmount > 1000
WITH CHECK OPTION;
Med det här alternativet kan du inte infoga en order med TotalAmount på 500 via vyn HighValueOrders. Databasen avvisar åtgärden eftersom den nya raden inte uppfyller vyns WHERE villkor.
Håll vydefinitioner fokuserade på ett specifikt syfte. En vy som försöker tjäna flera syften blir ofta svår att optimera och förstå. Skapa separata vyer för olika användningsfall i stället för att skapa en komplex vy.
Ta reda på när vyer ska användas
Vyer utmärker sig i specifika scenarier där deras egenskaper ger tydliga fördelar. Om du förstår de här scenarierna kan du välja rätt verktyg för varje situation.
Använd vyer för att förenkla komplexa frågor som flera program eller användare behöver köra. Skapa en vy en gång i stället för att kräva att alla förstår komplexiteten i att ansluta fem tabeller med specifika villkor. Den här centraliseringen innebär också att du kan optimera eller ändra logiken på ett och samma ställe.
Överväg vyer när du behöver begränsa dataåtkomsten på kolumn- eller radnivå. En vy kan endast exponera de kolumner som är lämpliga för en roll samtidigt som känslig information döljs. I kombination med lämpliga behörigheter kan du med vyer bevilja åtkomst till specifika data utan att exponera hela tabeller.
Vyer fungerar bra för att presentera data i olika format för olika syften. Du kanske har en produkttabell med teknisk information, men ditt rapporteringsteam behöver en förenklad version med beräknade fält. Skapa en vy som transformerar och aggregerar data på rätt sätt.
Identifiera samtidigt när andra objekt fungerar bättre. För prestandakritiska frågor som alltid returnerar samma resultat lagrar indexerade vyer (materialiserade vyer) resultatuppsättningen fysiskt. För komplexa beräkningar som accepterar parametrar ger användardefinierade funktioner större flexibilitet. För datamodifieringslogik ger lagrade procedurer bättre kontroll.
När du behöver kapsla in återanvändbar frågelogik utan parametrar och vill presentera data på ett förenklat sätt är vyer din lösning. De överbryggar klyftan mellan den fysiska databasstrukturen och den logiska vyn av data som dina program behöver.