View Oluşturma
Sql komutlarından view oluşturma ve faydaları, myadminde gösterimi
VİEW OLUŞTURMANIN YARARLARI
1. Veri güvenliği
Veri tabanı içinde bulunan tablolardakibazı sütunlarda bulunan bilgilerin, herkes tarafından görülmesi istenmeyebilir.
Örneğin, personelin maaşlarının herkes tarafından listelenebilir olması mahsurlu olabilir. Bu durumda, Personel adlı temel (base) tablodan, persview adlı bir view oluşturulabilir.
CREATE VIEW persview
AS SELECT sicil,sos_g_no,ad,soyad,dog_tar,adres,cinsiyet,bol_no,yon_s_g_n
FROM Personel;
persview adlı view, herkesin kullanımına açık, Personel adlı temel (base) tablo ise, yetkili kişiler dışındakilere, erişilemez hale getirilirse, maaşların herkes tarafından erişilebilir bilgi olması önlenmiş olur.
Bir view’den bilgi listelenmesi temel tablodan bilgi listelenmesinden farklı değildir.
SELECT *
FROM persview;
persview’den maaşlar hariç, tüm personel bilgileri listelenecektir.
Bir temel tablodan bir view oluşturulurken, temel tablodaki aynı sütun (alan) isimlerini kullanmak zorunda değildir. Örneğin, Parça adlı ve par_no, par_ad, pr_no, fiyat ve ağırlık adlı sütun (alan) isimlerini içeren tablo kullanılarak oluşturulan parview içinde, par_no yerine parc_no, fiyat yerine fiy ve ağırlık yerine ağır isimleri kullanılmıştır:
CREATE VIEW
Parview(parc_no,fiy,ağır)
AS SELECT par_no,fiyat,ağırlık
FROM Parça;
2. Sorgulamanın daha basit hale gelmesi
Karmaşık sorgulamalarda, bazı SELECT komutlarının sonuçları diğer SELECT komutlarınca kullanıldığında, sorgulamanın düzenlenmesinde yanlışlıklar yapma olasılığı artar. Karmaşık sorgulamalar, VIEW özelliği kullanılarak daha basit hale getirilebilir. Burada temel fikir şudur: Madem ki bir view, bir sorgulama sonucu elde edilen bilgiyi (tabloyu) isimlendirerek elde edilen bir virtüel tablodur; o halde karmaşık SELECT komutu içinde, sonucu kullanılacak başka bir SELECT komutu kullanmak yerine, bu sonucu bir view olarak isimlendirerek, view adını kullanmak. Bazı durumlarda ise, işletmenin veri tabanı uygulamasında çok sık olarak sorulan karmaşık soruları bir view yapısı içinde saklayarak, daha sonra aynı tip sorgulamalar için bu view yapısını kullanarak daha basit ifadeler kullanmakta olasıdır.
Örnek: Satış bölümünde çalışan personelin herhangi birinden daha düşük maaş alan ve mühendislik bölümünde çalışan kişileri listeleyiniz.
SELECT *
FROM Personel
WHERE maas<ANY(SELECT maas
FROM Personel
WHERE bol_no=2) AND
bol_no=1;
(Satış bölümü kodu 2 ve mühendislik bölümü kodu ise 1 kabul ediliyor.)
Şimdi bu sorunun cevabı olan tablo bir view olarak saklanırsa:
CREATE VIEW S1view
AS SELECT *
FROM Personel
WHERE maas<ANY(SELECT maas
FROM Personel
WHERE bol_no=2) AND
bol_no=1;
Bundan sonra aynı tip sorgulama için sadece
SELECT *
FROM S1view;
yazmak yeterli olcaktır.
3.Sadece view kullanılarak gerçekleşebilen sorgulamalar
Bir tablodan elde edilecek bilgiler için, iki kademeli işlem gerektiren sorgulamalarda, ilk adımda bir view oluşturup ikinci adımda esas sorgulamayı bu view yardımı ile gerçekleştirmek, çoğu kez kaçınılmaz bir durumdur.
Aşağıdaki soru ve bunun çözümü olan SQL ifadeleri bu konuda bir fikir verecektir:
Örnek: Her bölümde, o bölümdeki ortalama maaştan daha yüksek maaş alanları listeleyiniz. Bu sorunun cevaplandırılması için önce her bölümdeki ortalama maaşların bulunması gereklidir.
CREATE VIEW BOL_OR_VIEW(bol_no,ort,maas)
AS SELECT bol_no,AVG(maas)
FROM Personel
GROUP BY bol_no;
Daha sonra, yaratılan BOL_OR_VIEW yardımı ile (bu view, bölüm no’ları ve bölüm ortalama maaşlarını saklamaktadır) sorulan sorunun cevabı elde edilebilir:
SELECT *
FROM Personel
WHERE bol_no=BOL_OR_VIEW.bol_no
. AND.maas>ort_maas;
(Bu sorunun cevabını, şu ana kadar anlatılan diğer bilgilerle bulmaya çalışınız.)
4.Veri bütünlüğünün sağlanması
View oluşturma esnasında CHECK sözcüğünün kullanılması ile, o view’i oluştururken sağlanması gereken koşulların, daha sonra view içine veri ekleme ya da değişiklik işlemlerinde de ihmal edilmesi engellenmiş olur.
Örneğin aşağıdaki gibi bir VIEW oluşturulsun:
CREATE VIEW UST_PER_VIEW
AS SELECT FROM Personel
WHERE maas>25000000,
WITH CHECK OPTION;
Burada,maaşı 25000000’un üstünde olan personelden oluşan bir UST_PEVIEW adlı view oluşturulmuştur. Daha sonra bu view içine;
INSERT INTO UST_PER_VIEW
VALUES(27521,’27865427’,’Ayşe’
‘Okan’,{01/05/62},’Cumh. Cad. 46-Taksim’,
.F.,13000000,1,’27651112’);
komutu ile maaşı 13000000 olan bir personel eklenmek istendiği zaman şu hata mesajı alınacaktır.
Error: NOT enough non-NULL VALUES
Eğer CHECK opsiyonu kullanılmasaydı hata mesajı alınmadan bu veri view içine yüklenecekti. Bir tablo ya da view üzerinde veri ekleme, güncelleme ve silme işlemleri bir sonraki bölümde incelenecektir.
View’ler Üzerinde Ekleme, Silme, Değişiklik İşlemleri
VIEW’ler üzerindeki ekleme, silme ve değişiklik işlemleri esas itibarı ile tablolar üzerinde yapılan benzer işlemlerden çok farklı değildir. Fakat VIEW’ler üzerinde bu tip işlemlerin gerçekleştirilmesinde bazı kısıtlamalarda mevcuttur. Aşağıdaki hususların belirtilmesinde fayda vardır: Bir view’in güncellenebilir nitelikte olması için, bir birleştirme (join) işlemi sonucunda üretilmemiş olması gerekir. Başka bir deyişle, CREATE VIEW komutunda FROM sözcüğünü izleyen kısımda sadece tablo adı bulunmalıdır.
View içindeki hiçbir kolon bileşik (aggregate) fonksiyonlarca üretilmiş olmamalıdır. (MAX, SUM v.b) View’in üretildiği SELECT komutunda DISTINCT, GROUP BY ya da HAVING sözcüklerini içeren parçaların yerine getirilmiş olmamalıdır.
Bu koşulları sağlamayan view’ler sadece okunabilir (Readonly) özellikteki view’lerdir ve üzerlerinde herhangi bir değişiklik yapılamaz.
View içine satır ekleme
Daha önceden oluşturulmuş Px adlı view, ad, soyad ve maas alanlarını içermiş olsun. Bu view, güncellenebilir nitelikte ise, aşağıdaki INSERT komutu ile, aynen tablolarda olduğu gibi kendisine bir satır eklemek mümkün olacaktır:
INSERT INTO Px
VALUES (‘Ali’,’Çakır’,12000000);
Daha önceden, VIEW oluşturulurken, CHECK OPTION alternatifi kullanılmışsa, bu takdirde, ekleme esnasında, VIEW’i oluşturan koşul ihlal ediliyorsa, sistem eklemeye müsaade etmeyecek ve hata mesajı verecektir.
Örnek: Personel adlı tablodan, maaşı 20000000 TL’yi aşan personeli alarak, UST_PER_VIEW adlı bir view oluşturunuz.
CREATE VIEW UST_PER_VIEW
AS SELECT FROM Personel
WHERE maas>20000000
WITH CHECK OPTION;
Şimdi UST_PER_VIEW içine
INSERT INTO UST_PER_VIEW
VALUES (37261,’34268152’,’Beril’,
’Caner’,{01/04/64},’Kadıköy’,.F.,
14000000,2,’37624158’);
komutu ile maaşı 14000000 olan bir kişi eklenmek istendiğinde, bu komut kabul edilmeyecek ve aşağıdaki hata mesajı alınacaktır:
Error:NOT enough non-NULL VALUES
Eğer CHECK opsiyonu kullanılmasaydı, hata mesajı verilmeksizin bu satır, view içine eklenecektir.
View içinden satır silme
Güncellenebilir bir view içinde satır silme işlemi, tablolardan satır silme işlemi ile aynı şekilde gerçekleştirilir. Örneğin 6.9.2’de oluşturulan UST_PER_VIEW içinden, maaşı 2500000’den az olan kişiler silinmek istenirse;
DELETE FROM UST_PER_VIEW
WHERE maas<2500000;
komutunu kullanmak yeterli olacaktır.
View satırları üzerinde güncelleme işlemi
Güncellenebilir view’lerde güncelleme işlemi tablolardakinin aynıdır. Örneğin UST_PER_VIEW adlı view’de sicili 27251 olan kişinin maaşının 37000000 olarak değiştirmek için;
UPDATE UST_PER_VIEW
SET maas=37000000
WHERE sicil=27251;
komutunu kullanmak uygun olacaktır.
Bir view’i silmek
Tabloların silinmesine benzer şekilde, sistemde oluşturulan bir view, DROP VIEW komutu ile silinebilir.
DROP VIEW UST_PER_VIEW;
Bir view’in silinmesi ile, o view’e bağlı olarak oluşturulmuş diğer bütün view’ler ve bu view ile ilişkili önceliklerin de tümü silinmiş olacaktır.
Kaynak : Burak Taş