VIEWS
Özellikle karmaşık sorgu cümleciklerini
sadeleştirmek amaçlı View tanımlanır.View genellikle okuma(read) amaçlı kullanılıyor
olsada,view’ler üzerinden günceleme,silme,ekleme işlemleride yapılabilmektedir.View’ler
adı üzerinde sadece bir görünümdür.Verinin aslı değildir.Örneğin Product tablosunda
Color özelliği ‘Silver’ olan ürünleri içeren bir view oluşturmak istediğimizde şöyle
bir T-SQL komutu yazmalıyız;
|
CREATE
VIEW v_Products
AS
SELECT
ProductID,[Name],Color,ListPrice
FROM
Production.Product
WHERE Color='Silver'
|
Bu komutla birlikte
v_Products isminde bir view
oluşturulacaktır.View dediğimiz şey sadece ve sadece bir SELECT ifadesinin yerini
v_Products
isminin almasıdır.Yani View’daki veriler için harddiskin özel bir bölgesinde veriler
tutulmaz.View dediğimiz şeyin içi boştur.Sadece bir SELECT ifadesini ifade eder.Dolayısıyla
gibi bir ifade işletildiğinde,
v_Products ifadesinin yerine
yukarıdaki select ifadesi getirilir ve ana tabloda yani Production.Product tablosunda
seçme işlemi yapılır.Dediğimiz gibi View sadece karmaşık sql ifadelerimizi arındırmak,onlara
sabit bir isim vermek amaçlı kullanılmaktadır.Asıl veri View’da tutulmayıp,yapılan
sorgu ana tablo üzerinden işletilmektedir.
Yukarıdaki örnekte sql ifademiz
son derece basittir.Normalde böyle basit sql cümlecikleri için View kullanılmaz.View
biraz öncede dediğim gibi çok karmaşık sql ifadelerinde(JOIN,
Aggregation( SUM, AVG vs.)) kullanılmaktadır.
Yukarıdaki ifadede view oluşturulduktan
sonra bir başkası, bu sql server objesinin üzerine sağ tıklayıp ‘Script View As’
butonuna tıklayıp,View’ın orjinal T-SQL komutunu elde edebilir.Eğer karmaşık SQL
cümleciğimizde pek çok tablodan veri çekiyor isek ve tablolarımızın yapısının,bilinmesini
istemiyor isek,View sql cümleciğini diğer kişilerden saklamak istiyor isek,bu ifade
veri tabanında şifrelenebilmektedir.Bunun için yukarıdaki T-SQL komutunu şu şekilde
düzenlememiz gerekmektedir;
|
CREATE
VIEW v_Products
WITH
ENCRYPTION
AS
SELECT
ProductID,[Name],Color,ListPrice
FROM
Production.Product
WHERE Color='Silver'
|
Bu durumda kullanıcı şifrelenmiş
View sql’ine ulaşamayacaktır.İşin kötü tarafı sizde ulaşamayacaksınız. O yüzden
Sql ifadenizi bir başka yerde muhaza etmeniz gerekmektedir.
Yukarıdaki ifadede Product tablosu
üzerinden işletilmek üzere bir view oluşturulmuştur.Bu view sistemde kayıtlıdır.View
oluşturduktan sonra,view’ın kullandığı tablolardan biri silinirse(drop edilirse),
sistem hata vermeyecektir.Ama ardından view’i kullanmak istediğimizde hata alacağız.Bir
View oluşturduğumuzda,view’in sql cümleciğinde kullandığımızda tabloların vs. silinmesini
engellemek istiyor isek T_SQL komutumuzu şu şekilde düzenlememiz gerekmektedir;
|
CREATE
VIEW v_Products
WITH
SCHEMABINDING
AS
SELECT
ProductID,[Name],Color,ListPrice
FROM
Production.Product
WHERE Color='Silver'
|
Bu durumda Product tablosu v_Products
view’ı silinmeden,silinemeyecektir.
View gerçekleştirirken AS ifadesinden
sonra SELECT ifadesi yazıyoruz.Bu SELECT ifadesinde bazı kısıtlamalar vardır.Bunlar
şunlardır;
o
COMPUTE
ve COMPUTE BY ifadeleri içeremez.
o
INTO
keyword’ü kullanılamaz.
o
OPTION
keyword’ü kullanılamaz.
o
Geçici
tablolara(temporary tables) referans edemez.
o
TOP
ifadesi içermeyen ORDER BY keyword’ü kullanılamaz.ORDER BY kullanabilmek için ifadede
TOP keyword’ü kullanılmalıdır.
v_Products ismindeki bir View eğer
hem Product hemde ProductModel tablosundan veri çekiyor ise ve bu view’ı Ahmet kullanıcısı
kullanmak istiyor ise,Ahmet kulanıcının sadece view üzerinde hak sahibi olması yeterli
değildir.Ahmet’in bu view’ı kullanabilmesi için Product ve ProductModel tablolarının
sahipleri Ahmet’e bu tablolar üzerinde SELECT izni vermeleri gerekmektedir.Yani
Ahmet’in bu view’i kullanabilmessi için hem v_Products view’i hem Product hemde
ProductModel tabloları üzerinde SELECT iznine sahip olması gerekmektedir.
View’ler Üzerinden Güncelleme Yapmak
Bir view üzerinde INSERT,UPDATE,DELETE
işlemleri yapabilmemiz için view birden fazla tablo içermemelidir.AVG,SUM,COUNT,MIN,MAX
gibi alanlar üzerinden güncelleme yapılamaz.,
Yukarıdaki örnekde Product tablosundan
Color özelliği ‘Silver’ olan ürünleri getiriyorduk.Eğer View üzerinden Product tablosuna
bir kayıt eklemek istiyor isek bu kaydın Color özelliği ‘Silver’ değil ise,kayıt
asıl tabloya yine eklenecek fakat view üzerinden görüntülenmeyecektir.Bu durumu
engellemek için WITH CHECK OPTION ifadesini kullanıyoruz.Color özelliği ‘Silver’
olmayan kayıtları view üzerinden tabloya eklenmesini engellemek istiyor isek bu
durumda T-SQL ifademizi şu şekilde değiştirmemiz gerekmektedir;
|
CREATE
VIEW v_Products
AS
SELECT
ProductID,[Name],Color,ListPrice
FROM
Production.Product
WHERE
Color='Silver'
WITH CHECK
OPTION
|
|