Veritabanı View’ler
Bu yazımızda belirli bir vtys özeline inmeden veritabanı view’lerinden, nasıl oluşturulup kullanıldıklarından ve üzerinde yapabileceğimiz DML işlemlerinden bahsedeceğiz.
View’ler fiziksel tablolar üzerinde çalıştırılan sorgular sonucu elde edilen verileri listelemeye yarayan mantıksal yapılardır. View’ler üzerinde veriler fiziksel olarak tutulmaz, bunun yerine sadece view’in tanımı tutulur. Bir view her çağrıldığında tanımda yer alan sorgu yeniden çalıştırılır, bu yüzden view içindeki veriler en güncel haldedir.
View’ler mantıksal olarak tablolar ile aynı yapıya sahiptirler, aynı şekilde satırlar ve kolonlar içerirler.
Fiziksel tablolar ile aynı yapıda olmasına rağmen neden view’lerin kullanımına gerek duyulduğunu düşünebilirsiniz. Temel birkaç sebebi şu şekilde sıralayabiliriz:
1-)Çok uzun ve karmaşık sorguları bir view içinde alarak sorguyu her çalıştıracağımızda basit bir select işlemi ile sorguyu tamamlayabiliriz.
2-)Birden fazla fiziksel veya mantıksal veritabanından tek bir veritabanından veri çekiyormuş gibi veri çekebiliriz.
3-)Gelen veriler üzerinde matematiksel işlemler veya formatlama işlemleri yaparak bunu kolon değeri gibi gösterebiliriz.
4-)Elimizdeki veritabanını mantıksal gruplara ayırıp (yıllar,modeller vb.) daha kolay raporlama ve daha yüksek performans alabiliriz.
5-)Uygulama geliştirici veya kullanıcılara sadece view’lere erişim hakkı verip tablolara erişim hakkı vermeyerek ekstra güvenlik sağlayabiliriz.
View Oluşturma
Bir view oluştururken aşağıdaki gibi bir sorgu kullanılır.
CREATE VIEW view_adi AS sorgu
örneğin
Create View vw_ticariotolar as Select * from otolar where turu=’ticari’
View güncelleme ve silme
Bir view’i güncellemek için
Alter VIEW view_adi AS sorgu
silmek için ise
Drop VIEW view_adi
örneğin
Alter View vw_ticariotolar as Select * from otolar where turu=’ticari’ and model=’2008′
Drop view vw_ticariotolar
View’lerde DML işlemleri
View’ler salt okunur olabileceği gibi, güncellenir de olabilirler. Bir View’in güncellenebilir olması için bazı şartları sağlaması gerekmektedir. Bunlar:
1-)Öncelikle view sadece bir tablo içermelidir.
2-)View’deki kolonlar max(),avg() vs. gibi kümeleme fonksiyonları kullanmamalılar.
3-)View’deki kolonlar Unique veya Distinct kullanmamalılar.
4-)Tanımda Union operatörü kullanılmamalı.
5-)Sorguda Group By veya hesaplanmış değerler olmamalıdır.
Bu şartları sağlayan bir view’de insert,update,delete işlemlerini yapabiliriz.
Örneğin
insert into vw_ticariotolar (turu,model) values (‘ticari’,’2007′)
Eğer yazdığımız view yukarıdaki şartları sağlamıyorsa güncellenebilir değildir, ve üzerinde dml işlemleri yapamayız. Ama kimi zaman salt okunur view’ler üzerinde de işlem yapmak isteyebiliriz. Bu durumda instead of trigger’ını kullanırız.
Instead Of Trigger
Adından da anlaşılacağı gibi bu trigger aracılığıyla bir işlem yerine kendi istediğimiz başka bir işlem ya da işlemler yaptırabiliriz.
Kullanımı aşağıdaki gibidir.
CREATE TRIGGER trigger_adi
ON view_adi
INSTEAD OF islem
AS
BEGIN
sorgu
END
islem yazan kısma hangi işlemin yerine trigger’ın tetikleneceğini belirtiriz. Update,Insert gibi..
Bir örnek vermek gerekirse
Create Trigger update_vw_ticariotolar On vw_ticariotolar
Instead of Update
As
Begin
Update Otolar
SET model = i.model,
SET turu = i.turu
From Inserted i
where otoid = i.otoid
END
Leave a Reply