Görünümler oluştur
Görünümler , SQL Server'da verilere erişmenizi ve verileri sunmanızı basitleştirir. SQL geliştiricisi olarak, karmaşık sorguları kapsüllemek, güvenlik sınırları sağlamak ve verileri uygulamanızın gereksinimlerine uygun bir biçimde sunmak için görünümler oluşturursunuz.
SQL Server'da görünümleri anlama
Görünüm, bir SELECT ifadeye dayanan sanal bir tablodur. Fiziksel tabloların aksine görünümler verileri depolamaz. Bunun yerine, sorguladığınız her seferinde temel alınan tablolardan verileri alırlar.
Görünümlerle yan tümcelerin, hesaplamaların ve filtrelerin JOIN karmaşıklığını uygulama kodundan gizleyebilirsiniz. Örneğin, uygulamanızın ürün ayrıntılarıyla sık sık müşteri siparişlerine ihtiyacı varsa, Müşteriler, Siparişler ve Ürünler tablolarını kullanan JOIN bir görünüm oluşturabilirsiniz. Uygulamanız, aynı karmaşık JOIN'yi tekrar tekrar yazmak yerine tek bir görünümü sorgular.
Görünümler bir güvenlik katmanı da sağlar. Kullanıcılara bir görünüm aracılığıyla belirli sütunlara erişim izni verirken, temel alınan tablolara erişimi kısıtlayabilirsiniz. Bu yaklaşım, tam tablo erişimi vermeden yalnızca kullanıcıların ihtiyaç duyduğu verileri kullanıma sunmanızı sağlar.
Temel görünüm oluşturma
CREATE VIEW deyimini kullandıktan sonra bir SELECT sorgusu ile görünüm oluşturursunuz. Görünüm tanımı, görünümü sorguladığınızda hangi verilerin görüneceğini belirler.
Müşteri ve sipariş bilgilerini birleştiren basit bir görünüm aşağıdadır:
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;
Bu görünümü oluşturduktan sonra, herhangi bir tablo gibi sorgulayabilirsiniz:
SELECT * FROM Sales.CustomerOrders
WHERE CustomerName = 'Contoso Ltd';
Görünüm, temel alınan SELECT deyimini yürütür ve sonuçları tek bir tablodan geliyormuş gibi döndürür. Bu basitleştirme, uygulama kodunuzu daha temiz ve bakımını kolaylaştırır.
Ayrıca, hesaplanmış sütunlarla görünümler de oluşturabilirsiniz. Aşağıdaki görünüm, siparişleri boyuta göre kategorilere ayıran bir sütun ekler:
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;
Bu görünüm, kategorilere ayırma mantığını tek bir yerde işler. OrderSummary'ye yönelik her sorgu, CASE ifadesini yinelemeden aynı hesaplamayı yapar.
Tasarımla ilgili dikkat edilmesi gerekenleri uygulama
Görünümleri tasarlarken bunların nasıl kullanılacağını ve korunacaklarını göz önünde bulundurun. İyi tasarlanmış görünümler basitliği, performansı ve güvenliği dengeler.
Kullanmak yerine SELECT *, sütun adlarını açıkça belirtin. Açık sütunlar, görünümleri daha sürdürülebilir hale getirir ve temel tablolar değiştiğinde beklenmeyen sonuçları önler. Biri temel tabloya sütun eklerse görünüm tanımınız tutarlı kalır:
CREATE VIEW Sales.ActiveCustomers
AS
SELECT
CustomerID,
CustomerName,
Email,
Phone
FROM Sales.Customers
WHERE IsActive = 1;
Görünümler veri değişikliklerini işleyecekse yan tümcesini WITH CHECK OPTION kullanın. Bu seçenek, INSERT ve UPDATE deyimlerinin yalnızca görünümdeki satırları etkilemesini sağlar:
CREATE VIEW Sales.HighValueOrders
AS
SELECT
OrderID,
CustomerID,
OrderDate,
TotalAmount
FROM Sales.Orders
WHERE TotalAmount > 1000
WITH CHECK OPTION;
Bu seçenekle, HighValueOrders görünümü aracılığıyla TotalAmount değeri 500 olan bir sipariş ekleyemezsiniz. Yeni satır görünümün WHERE koşuluna uymadığından veritabanı işlemi reddeder.
Görünüm tanımlarının belirli bir amaca odaklanmasını sağlayın. Birden çok amaca hizmet etmeye çalışan bir görünümün iyileştirilmesi ve anlaşılması genellikle zorlaşır. Tek bir karmaşık görünüm oluşturmak yerine farklı kullanım örnekleri için ayrı görünümler oluşturun.
Görünümlerin ne zaman kullanılacağını belirleme
Görünümler, özelliklerinin net avantajlar sağladığı belirli senaryolarda mükemmeldir. Bu senaryoları anlamak, her durum için doğru aracı seçmenize yardımcı olur.
Birden çok uygulamanın veya kullanıcının yürütmesi gereken karmaşık sorguları basitleştirmek için görünümleri kullanın. Herkesin belirli koşullarla beş tabloyu birleştirmenin karmaşıklığını anlamasını gerektirmek yerine, bir kez görünüm oluşturun. Bu merkezileştirme, mantığı tek bir yerde iyileştirebileceğiniz veya değiştirebileceğiniz anlamına da gelir.
Sütun veya satır düzeyinde veri erişimini kısıtlamanız gerektiğinde görünümleri göz önünde bulundurun. Bir görünüm, hassas bilgileri gizlerken bir role uygun olan sütunları yalnızca gösterebilir. Görünümler, uygun izinlerle birlikte tabloların tamamını göstermeden belirli verilere erişim izni vermenizi sağlar.
Görünümler, verileri farklı amaçlarla farklı biçimlerde sunmak için iyi çalışır. Teknik ayrıntıları içeren bir Products tablonuz olabilir, ancak raporlama ekibinizin hesaplanmış alanlara sahip basitleştirilmiş bir sürüme ihtiyacı vardır. Verileri uygun şekilde dönüştüren ve toplayan bir görünüm oluşturun.
Aynı zamanda, diğer nesnelerin ne zaman daha iyi hizmet verdiğni de anlarız. Her zaman aynı sonuçları döndüren performans açısından kritik sorgular için, dizinlenmiş görünümler (gerçekleştirilmiş görünümler) sonuç kümesini fiziksel olarak depolar. Parametreleri kabul eden karmaşık hesaplamalar için kullanıcı tanımlı işlevler daha fazla esneklik sağlar. Veri değiştirme mantığı için saklı yordamlar daha iyi denetim sunar.
Parametreler olmadan yeniden kullanılabilir sorgu mantığını kapsüllemeniz gerektiğinde ve verileri basitleştirilmiş bir şekilde sunmak istediğinizde, görünümler sizin çözümünüzdür. Fiziksel veritabanı yapısı ile uygulamalarınızın ihtiyaç duyduğu verilerin mantıksal görünümü arasındaki boşluğu kapatır.