SQL Server - Views
View Nedir? Hangi Amaçlarla Kullanılır? View, bir veya birden fazla tablodan (base tablo) değişik sorgularla çekilmekte olan bilgilerin içerisinde tutulduğu sanal tablolardır. Hangi Amaçlarla Kullanılır? Bir kullanıcının bir tablo içerisindeki herşeyi görmesinin istenmediğinde, Bir kullanıcının çok miktarda veri bulunduran bir tablo üzerinde sorgulama yapması yerine işlemi daha kolaylaştırmak/hızlandırmak için bu verilerin bir bölümü üzerinde çalışması istendiğinde Kullanıcıların çeşitli birim dönüşümlerinden veya işlemlerden geçmiş verileri görmesi gerektiğinde Farklı ve karmaşık tablolarda tutulan verilerin tek ve sade bir şekilde görmesi gerektiğinde Kompleks sorguları basitleştirmek gerektiğinde kullanılır
View Oluşturma ve Kullanımı CREATE VIEW vwOgrenciler AS SELECT * FROM tbOgrenciler SELECT * FROM vwOgrenciler CREATE VIEW vwOgrencilerFiltre SELECT OgrKod, Name FROM tbOgrenciler WHERE Sinif=3
CREATE VIEW vwDolarFiyatlar (Urunkod, UrunAd, UrunFiyat) - - Alanlara yeni isimler verilebilir AS SELECT urunkod, urunisim, listefiyat FROM tbUrunler WHERE dovizkod=‘USD’ SELECT Urunkod, Urunad FROM vwDolarFiyatlar
CREATE VIEW vwHatali1 AS SELECT CREATE VIEW vwHatali1 AS SELECT * FROM tbOgrenciler ORDER BY ogrno Üstteki örnek çalıştığında hata verecektir. Çünkü View oluşturan kod bloğunda ORDER BY, COMPUTE, COMPUTE BY, INTO gibi ifadeler bulunamaz.
View’in Yapısını Değiştirme ALTER VIEW vwOgrencilerFiltre AS SELECT * FROM tbOgrenciler WHERE sinif=1 sp_helptext viewad - - - Varolan view’in kodunu gösterir. SELECT * FROM sys.views - - - Tanımlı view listesini gösterir.
CREATE/ALTER VIEW vwOgrencilerFiltre WITH ENCRYPTION AS SELECT CREATE/ALTER VIEW vwOgrencilerFiltre WITH ENCRYPTION AS SELECT * FROM tbOgrenciler WHERE ogrno BETWEEN 1 AND 50 View kodunun gizlenmesi/şifrelenmesi için WITH ENCRYPTION ifadesi kullanılır. Şifrelenmiş bir view ALTER edilirken her seferinde WITH ENCRYPTION ifadesi kullanılmalıdır. Kullanılmazsa şifrelemeden vazgeçildiği şeklinde düşünülerek çalıştırılır.
View’in Silinmesi DROP VIEW vwOgrencilerFiltre
View’ler ile Kayıt İşlemleri Viewler bünyelerinde veri tutmadıklarından ilgili değişiklikler doğrudan base tablo üzerinde gerçekleşirler. Bir view aynı anda sadece tek bir tabloda veri değiştirebilir. Birden fazla tablodan veri çeken bir view üstünde değişiklik yapılacaksa, ya aynı anda tek tablo üstünde değişiklik yapacak parçalara bölünür ya da INSTEAD OF triggerları kullanılır. Bir view, veri gireceği base tablodaki IDENTITY, NOT NULL, CONSTRAINT veya indekslere takılmamalıdır. WHERE ile filtrelenmiş bir kaydın, UPDATE cümlesi ile filtre dışına çıkması veya bir view tarafından seçemediği bir kaydı eklemesi olasıdır. Bu tür durumları önlemek için view tanımı WITH CHECK OPTION seçeneği ile yapılmalıdır. Veri güvenliği açısından koruma sağlar.
CREATE VIEW vw_100BirimAlti AS SELECT urunad, fiyat FROM tbUrun WHERE bfiyat<100 INSERT INTO vw_100Birimalti(urunad, fiyat) VALUES (‘kitap’, 300) satırı çalışır. Fakat vw_100BirimAlti isimli view bu kaydı listeleyemez.
Kişinin göremeyeceği kayıtlar ekleyememesi için vw_100BirimAlti isimli view aşağıdaki gibi değiştirilmelidir. ALTER VIEW vw_100BirimAlti AS SELECT urunad, fiyat FROM tbUrun WHERE fiyat<100 WITH CHECK OPTION Yapılan bu düzenleme sonrasında aşağıdaki kayıt ekleme kodu hata verecektir. INSERT INTO vw_100Birimalti(urunad, fiyat) VALUES (‘kitap’, 300)
Parçalı View Oluşturma CREATE VIEW vw_TumSubeler AS SELECT * FROM tbSube1 UNION ALL SELECT * FROM tbSube2 SELECT * FROM vw_TumSubeler tbSube1 tablosu Subekod tint not null Urunkod int Urunad varchar(50) Subekod ve urunkod - - Primary Key (PK) Check (subekod=1) tbSube2 tablosu Check (subekod=2) Insert into vw_TumSubeler (subekod, urunkod, urunad) Values (1,4, ‘Defter’), (2,4, ’Kitap’), (2,5,’Cetvel’)
View’in Adını Değiştirme Sp_rename ‘view1’, ‘view1_new’ Exec/Execute Sp_rename ‘view1’, ‘view1_new’
Kaynaklar Yazılımcılar için SQL Server 2012 ve veritabanı Programlama, Y.Gözüdeli, Seçkin Yayınevi. Veritabanı Yönetim Sistemleri I, T.ÖZSEVEN, Murathan Yayınevi.