Sql server 'da çok sık kullandığım "select" sorgularım olabilir. Bu çok sık kullandığım "select" sorgularını, kullanmam gereken yerde her defasında uzun uzadıya yazmaktansa, bir kere tanımlayıp, ismiyle birlikte çağırmak daha mantıklıdır. İşte arkadaşlar bunun için "Views" nesneleri oluşturabiliriz. "View", kısaca kaydedilmiş "select" sorgularıdır, "select" dışında bir sorgu kullanılmaz. Özellikler ilişkisel veritabanlarında "join" gibi bir çok tablodan veri çekilirse daha performanslı çalışır. Veriyi hiç bir zaman kendi üzerilerinde taşımazlar, veri tabloda durur ve "select" sorgusunun sonucunu güncel olarak getirir. Veri tabanı nesneleri olduklarından dolayı "DDL" ile manipüle edilirler.
Neden Kullanırız ?
- Performans: "Strored Procedure" yada "Function" nesnelerinde nasıl bir performans söz konusuysa "Views" nesneleri için de bu performans geçerlidir. Nasıl bir performanstan bahsediyoruz biraz inceleyelim. Bir sorgu çalışmadan önce 5 aşamadan geçer. Önce kodun yazım hataları, syntax 'ı, semantic 'i kontrol edilir(Parse). Daha sonra sorguda kullanılan tabloların kolonları var mı, ona bakılır(Resolve). Bu ıslemden sonra sorgunun sonucunu nasıl döndüreceğini, indexlemeleri kontrol eder(Optimize). Daha sonra döndüreceği şeklı belirledikten sonra derleme işlemi yapılır(Compile). Son olarak sorgu çalışır ve sonuç döner(Execute). Tanımlanan "View" nesnesi çağırıldığında, "compile" işlemi dahil compile 'dan önceki tüm aşamaları işlemeden geçer. Geriye sadece "execute" işlemi kalır. Bu da önemli bir hız demektir.
- Güvenlik: Kurum yada departmanlar arası veriye sınırlı erişim yetkileri verilebilir. Bir şirkette her birimin her bilgiyi görmemesi istenir. "View" nesneleri kullanılarak istenilen birimin, istenilen tablodan, istenilen satır ve sütunlara görme yetkisi verilebilir. Örneğin sekreterimin çalışanlara ulaşabilmesi için onların maaşlarını görmesine gerek yoktur. Aksi takdirde çalışanlar arasında bir çekememezlik meydana gelebilir. Bu genelde genelde raporlamada kullanılır.
Bir örnek vererek "view" kullanımını kavrayalım. Yine "Northwind" veri tabanı üzerinde çalışacağız. "Products" tablosundaki "foreign key" sütunlarını daha anlamlı hale getirmek için "CREATE" ddl komutuyla, "UrunKatTed" adında bir "view" oluşturalım. Tipini de "VIEW" olarak belirtiyorum.
USE Northwind
GO
CREATE VIEW UrunKatTed
AS
SELECT p.ProductName,p.UnitsInStock,c.CategoryName,s.CompanyName
FROM dbo.Products p
INNER JOIN dbo.Categories c
ON p.CategoryID
= c.CategoryID
INNER JOIN dbo.Suppliers s ON p.SupplierID = s.SupplierID
"View" 'ler veri tabanı nesneleridir demiştik. Bu yüzden "object explorer" penceresinde oluşturuldukları veritabanında "Views" sekmesi altında yerini alırlar. "View" nesnem oluştu. Kullanmak istediğimde "FROM" anahtar sözcüğünden sonra istediğim gibi çağırabilirim. Aşağıda görüldüğü gibi istediğim kolon yada "WHERE" anahtar sözcüğüyle istediğim kritere göre filtreleme yapabilirim.
SELECT * FROM UrunKatTed
SELECT
CategoryName, CompanyName FROM UrunKatTed
SELECT * FROM
UrunKatTed WHERE CategoryName='Beverages'
SELECT
ProductName,UnitsInStock FROM
UrunKatTed WHERE
ProductName>'C'
ORDER BY 1
INSERT UrunKatTed(ProductName,
UnitsInStock, CategoryName, CompanyName)
VALUES ('Baocha',30,'Kahve','Java')
CREATE VIEW SipCal
AS
SELECT OrderID,dbo.Employees.FirstName+' '+dbo.Employees.LastName
/*AS [Ad Soyad]*/
FROM dbo.Orders
INNER JOIN dbo.Employees
ON dbo.Orders.EmployeeID = dbo.Employees.EmployeeID
NOT: "View" nesneleri "No Column Name" (isimsiz kolon) hatası verir. Yani tanımlanırken isimsiz kolonlara izin vermez. Çektiğimiz verileri listelerken, sadece gösterimde kendimiz oluşturduğumuz kolonlara isim verilmelidir. "Stored Procedures" ve "Functions" nesneleri için böyle bir kısıtlama yoktur.
CREATE VIEW SipCal
AS
SELECT OrderID,dbo.Employees.FirstName+' '+dbo.Employees.LastName AS [Ad Soyad]
FROM dbo.Orders
INNER JOIN dbo.Employees
ON dbo.Orders.EmployeeID = dbo.Employees.EmployeeID
GO
SELECT * FROM SipCal
Bu "view" 'imizi biraz değiştirelim. Çalışanlara göre, çalışanları yaptığı satış sayısını getirsin. Yine "DDL" komutlarıyla bir değişiklik yapıyorum.
ALTER VIEW SipCal
AS
SELECT COUNT(dbo.Orders.OrderID) AS [Siparis Sayısı],
dbo.Employees.FirstName + ' ' + dbo.Employees.LastName AS [AD SOYAD]
FROM dbo.Orders
INNER JOIN dbo.Employees
ON dbo.Orders.EmployeeID = dbo.Employees.EmployeeID
GROUP BY dbo.Employees.FirstName + ' ' + dbo.Employees.LastName
GO
SELECT * FROM SipCal
Daha sonra yine "DDL" komutlarıyla "view" nesnemi silebilirim.
DROP VIEW sipcal
Peki ama ben kayıtlarımın hepsini listelemek istiyorum derseniz, "TOP 100 PERCENT" kullanım şekli kayıtlarınızın 100% 'ünü getirecektir.
CREATE VIEW CalisanTelefon
AS
SELECT TOP 100 PERCENT FirstName,LastName,HomePhone
FROM dbo.Employees ORDER BY FirstName
GO
SELECT * FROM CalisanTelefon
Hiç yorum yok:
Yorum Gönder