SQL Server Views oluşturma


SQL Server Views

"View nedir? Ne değildir?" sorularına geçmeden önce View'ler hakkında kulaktan kalma bilgilerimizin ne kadarı doğru, ne kadarı yanlış bunları bir gözden geçirelim. View'lerhakkında en çok söylenen söz "Veritabanında ihtiyacın olmasa da istediğin kadar kullan hiç zararı yok, sonra üzerinden işlem yapmak daha kolay oluyor" sözüdür. Bu söz bir açıdan doğru olmasına rağmen yanlış bilgi içerdiği de su götürmez. View'ler, ihtiyaçduyulduğunda yaratılması ve doğru şekilde kullanılması halinde bizi birçok yükten kurtaracak olan veritabanı elemanlarıdır. Eğer yerinde kullanılırlarsa veritabanı üzerinde daha verimli çalışmamıza olanak sağlarlar.


Peki, nedir bu View'ler? View'ler bir veya birden fazla tablodan istenilen verilerin 
bir arada sunulmasını sağlayan tanımlanmış sorgulardır.
Sanal bir tablo olarak da düşünebiliriz. 
Aynı tablolar gibi satırlar ve sütunları içerir. 
Bir ya da birkaç tablodan seçtiğimiz verileri okuyabiliriz hatta bazı durumlarda veri girişi 
bile yapabiliriz. Peki neden “sanal” kelimesini kullanıyoruz? 
Çünkü View'ler veri saklamazlar sadece istenen veriye ulaşılacak yolu kullanarak 
verileri kullanıcıya sunarlar. 
View'leri nasıl yaratacağımız konusuna girmeden, bize ne avantajlar sağlıyorlar biraz 
bahsedelim çünkü sağladığı avantajları bilirsek ne amaçlar için kullanacağımıza da daha 
rahat karar veririz. Daha önce gereksiz yere View yaratıp kullanmanın hem bizim için 
hem de veritabanı için verimsiz olacağından zaten bahsetmiştik.
-Birden çok tablo ile çalışırken gereksiz karmaşadan(özellikle her seferinde uzun bir SQL 
sorgu cümlesi yazmakla uğraşmaktan) kurtulmak.
-Veri ulaşım performansını arttırmak.
-Veri erişimini sınırlamak ve kontrol altında tutmak.
Buraya kadar kod yazmamamızın en önemli nedeni View hakkında öğreneceğiniz bilgilerin 
“SQL’de nasıl View yaratılır?” sorusunun cevabından daha yararlı ve karmaşık olmasıdır. 
Bir diğer neden ise eğer yeterince SQL bilgisine sahipsek zaten bir View’in nasıl yazılması 

gerektiğini az çok biliyor olmamızdır.



CREATE VIEW vw_ogrenciNotlari
AS
SELECT o.ad,o.soyad,d.dersAd,n.notu
FROM tbl_ogrenci o
join tbl_ogrenciNot n ON o.ogr_id=n.ogr_id

join tbl_ders d ON n.ders_id=d.ders_id



SQL bilgisine sahip olmasak bile işlem yapacağımız veritabanı içindeki Views klasörüne 
sağ tuşla tıklayıp “New View…” seçeneğini seçtikten sonra karşımıza gelen ekrandan 
tablolar ekleyerek kolaylıkla yaratmak istediğimiz View’i hazırlayabiliriz. Tek yapmamız 
gereken tablolardan istediğimiz sütunları belirleyip Select cümlemizin otomatik olarak 

yazılmasını sağlamaktır



View oluştururken dikkat etmemiz gereken hususlar:
Oluşturulan View de;-Compute ya da Compute By cümleciği,
-Into anahtar sözcüğü,
-Option cümleciği
kullanılamaz.
-View’ler temporary tablo dediğimiz geçici olarak oluşturulan tablolara referans 
verilemez. Bu tablolardan veri istenemez. 
-Order By cümleciği sadece TOP operatörü ile birlikte kullanıldığında kullanılabilir.
-Bir View farklı tablolardan gelen aynı isimlere sahip farklı sütunları içerebilir.

-View’lerdeki sütunlar aritmetik ifadelere sahip olabilir


CREATE VIEW view_ismi [(görünen sütun ismi,…)]
[WITH {ENCRYPTION | SCHEMABINDING}]
AS
select_cümlesi
[WITH CHECK OPTION]
Görüldüğü gibi sadece –
Create View view_ismi
As
select_cümlesi
- ile bir view yaratabiliriz. Bizi asıl zorlayacak kısım yazacağımız Select cümlesi olsa 
gerek, başka bir içerikte kalmadı gibi.
Create View [sahip_ismi].view_ismi kısmındaki [sahip_ismi] alanını doldurmak zorunda 

değiliz yani isteğe bağlı olarak doldurulabiliriz. Yalnız daha sonra karışıklık olmaması için o View’in kim tarafından yönetileceğini belirtmek yararımıza olacaktır. Hiçbir isim 
girilmemesi durumunda o sıradaki kullanıcıyı View’in sahibi olarak atayacaktır.
Create View view_ismi başlangıcından sonra gelen [(görünen sütun ismi,…)] yazan 
bölümde Select sorgusu ile sonuçta gösterilecek sütunların isimlendirmesini yapabiliriz. 
Birden fazla sütun ismi yazmak için sütunların arasına yukarıdaki gibi virgül koyulur.
Bunu test etmek için gelin ilk yaptığımız örneğin sütunlarının Türkçeleştirilmiş halini, yeni 
bir View olarak oluşturalım. İki örneği kıyaslayıp sonuçlarını görüntülediğimizde farkı 
görebiliriz.
Geldik View kullanmayı kulaktan dolma öğrenmiş ve View oluşturmayı bildiğini iddia eden 

bazı insanların kullanmaya aşina olmadığı bölümlere.
[WITH {ENCRYPTION | SCHEMABINDING}]
Encryption:
Öncelikle With Encryption cümlesinin ne işe yaradığından bahsedelim biraz. Aşağıda 
yaptığımız örneği direk alıp kopyalarsak oluşturduğumuz View’den sonuçta ne olduğunu 
büyük olasılıkla anlayamayacağız.
Encryption yapısını kullanmamızın nedeni o veritabanında oluşturduğumuz View’in kod 
içeriğinin yani View’i oluşturmamızı sağlayan kaynak kodun görüntülenemez şekilde 
şifrelenmesidir. Görüntülenemez çünkü Encryption yaptığımız bir View’i Decryption gibi 
bir işlemle geri alamıyoruz. Şifresiz haline döndüremiyoruz. Bunu yapabilmek için View’in 
kaynak koduna ihtiyaç duyuyoruz. Kaynak kodunu bildiğimiz bir View’in şifrelenmiş 
kaynak kodunu niye açmaya çalışalım ki sonuçta. Bu yüzden Encryption(şifreleme) 
yapmayı düşündüğümüz View cümlesinin yedeğini kaydetmeyi unutmazsak bizim için 
daha iyi olur. Tekrar bu cümleyi oluşturmak zorunda kalacağımız durumlarda oradan alıp 
kullanabiliriz
Örnek-3: With Encryption yapısı



Daha önce bahsettiğimiz gibi Encryption yaptığımız View’in kaynak kodunu görmemiz 
mümkün değil. Örnekte oluşturduğumuz View’e sağ tuşla tıkladığımızda karşımıza çıkan Modify veya Design seçeneği artık inaktif durumda. View’lerin içeriğini görüntülemenin bir 
başka yolu da bir stored procedure(saklı yordam) kullanmak, sp_hepltext.
sp_helptext ‘ÖrnekViewinİsmi’
Bu stored procedure’e Encryption yaptığımız örneğimiz üzerinde işlem yapmasını 
söylersek daha önce Encryption yapıldığı için sonuçta bir hata mesajı almamız kaçınılmaz. 
Fakat biz bunu öncelikle Encryption yapılmamış bir View üzeride deneyelim. Ben ilk 
yaptığımız View örneğini kullanarak sp_helptext stored procedure’ünü çalıştıracağım


SchemaBinding:
Encryption kelimesi kadar olmasa da Schemabinding kelimesinin tercümesi, zaten bize ne 
amaçlar için kullanabileceğimizi anlatmaya yeter gibi gözüküyor. Eğer oluşturacağımız 
View’de With Schemabinding kullanırsak ya da daha önce oluşturduğumuz bir View’e 
ALTER View ile With Schemabinding özelliği verirsek bu View’de görmek istediğimiz 
verilerin tutulduğu tablolardaki veri çektiğimiz sütunları kilitlemiş oluruz.
Bir View’e Schemabinding özelliği eklemek istiyorsak hatırlamamız gereken iki durum var.
-Schemabinding’li View’imizde * kullanamayız. Yani select * from ... diye bir cümle 
kullanmaktansa bütün sütunların isimlerini tek tek girmeliyiz. Eğer aşağıdaki gibi 
kullanırsak Schemabinding’in neden olduğu bir hata mesajı ile karşılaşırız.


0 yorum:

Yorum Gönder

 
© 2014 İrfan Blog ' s | Mehmet İrfan ErdoğanTüm Hakları Saklıdır | r