Görünümler (Views)

Eyl 06, 2013

Görünümler, bir tablodan ya da arasında ilişki olan birden fazla tablodan, istenilen bakış açısıyla veri elde etmek için kullanılır. Fiziksel değil, sadece sanal tablolardır. Görünümler üzerinden verilere ulaşarak, onların üzerinde istenilen işlemler gerçekleştirilebilir.



Örnek olarak adresi İstanbul olan kişileri içeren bir görünüm oluşturularak, onları İstanbul'da düzenlenecek fuara davet edilebilir. 

"Views" nesnesi tıklandığında, "Enterprise Manager"ın sağ tarafında standart olarak oluşturulmuş görünümler görülür. Bunlar, sistemle alakalı olan görünümlerdir.

"View", bir ya da birkaç tablodan alınan bilgilerin bir araya getirildiği bir nesne türüdür. Tablolardan alınan bilgiler içeren görünümler üzerinde sorgulama işlemi daha rahat yapılabilir ve tablolar üzerinde hiçbir işleme gerek duymadan istenilen bilgiye görünümler üzerinden ulaşılabilir. Bunların referans alındığı tablolara base-tables (temel tablolar) adı verilir. Birkaç istisna dışında hemen hemen tüm "select" ifadeleri görünüm oluşturabilir.

Örneğin: LESSON1 tablosundan ViewLesson1 adında bir görünüm oluşturulsun.

ViewLesson1 de student_name, major ve teacher alanlarının olmasına ihtiyaç olduğu düşünülürse şöyle bir uygulama yapılır:

 

Oluşan görünüm, "Enterprise Manager" kullanılarak görüntülenmek istenirse şu formattadır:

Görünümlerin Avantajları:

  1. Görünümler belirli bilgiye ulaşmayı sağlarken belirli bir kısım bilgiye ulaşmayı da engeleyerek daha kısıtlı bir tablo yaratmış olurlar. Böylece, istenmeyen, gereksiz ya da uygun olmayan alanlar görünüm dışında bırakılabilir ve sadece gerekli bilgileri içeren bir tablo olan görünüm yaratılır. Bunun kullanıcıya sağladığı yarar şudur: Görünüm sayesinde kullanıcı; daha basit bir tablo üzerinde sorgulama işlemi yapma imkanı bulabilir.
  2. Kullanıcı yeni bir görünüm yaratırken daha kolay kullanabilmek için alanlara istediği isimleri verebilir ve böylece varsa karmaşık ve kullanımı zor alan isimlerinden de kurtulmuş olur.
  3. Veritabanı sahibi kişi bir tabloda sadece belli bazı alanlar için istediği kişilere sorgulama hakkı vermek yerine o tabloyu temel tablo kabul ederek bir görünüm oluşturabilir ve o görünümde istediklerine sorgulama hakkı verebilir. Böylece hem temel  tabloda herhangi bir değişikliğin yapılması önlenmiş olur; hem de sorgulama hakkına sahip kişilerin kesintisiz bir şekilde görünüm üzerinde sorgulama yapmaları sağlanır.
  4. İki ya da daha fazla tablonun "join" ile birleştirilmesi sonucu görünüm oluşturulabilir ve daha ileriki uygulamalarda kullanılabilecek bir nesne elde edilir.

credits tablosu ele alınsın;

credits tablosundan sadece Hasan'ın aldığı krediler toplamı bir görünümde görülmek istenirse şu uygulama yapılır:

IDENTITY1 ve COMPANY isimli tabloları ele alınsın:

Bu iki tablodan no ve number alanları "join" için aynı alanlar kabul edilirse name, surname ve age alanlarından oluşan bir görünüm yaratmak için şu uygulama yapılır:

Görünüm oluşturulurken "join" kullanılacaksa "inner join" kullanmak daha elverişlidir. "Outer join" kullanılırsa "join" şartına uymayan satırlar için null değerleri oluşacaktır ki, bu değerler üzerinde sorgulama yapmak gereksizdir. Bu sebeple "inner join" kullanmak daha uygundur

Görünümleri Değiştirmek ve Ortadan Kaldırmak

Bir görünüm yeniden yaratılabilir ya da veritabanından silinebilir. Bunun için ;

ALTER VIEW ifadesini   kullanılır:
ALTER VIEW owner.view_name
[(column[,...n])]
[WITH ENCRYPTION]
AS
select_statement
[WITH CHECK OPTION]

LESSON1 tablosu referans alınarak oluşturulmuş olan ViewLesson1'de değişiklik yapılmak isteniyor ve de "görünümün number, student_name ve teacher alanlarını kapsaması sağlanmak isteniyor. Bunun için şu uygulama yapılabilir:

Oluşturulan görünüme artık ihtiyaç yoksa veritabanından kaldırılabilir. Bunun için DROP VIEW ifadesi kullanılabilir. Bir görünüm kaldırıldığında ona ait olan tüm izinler ve tanımlar ortadan kalkar. Bir görünümün referans aldığı tablo ortadan kaldırılırsa görünüm kullanılamaz, ama aynı zamanda da otomotik olarak veritabanından düşmeyeceği için DROP VIEW ifadesini kullanarak o görünümü tamamen ortadan kaldırmak mümkündür.

ViewLesson1'i veritabanından kaldırmak için şu uygulama yapılır:

Görünüm Sahipleri Arasındaki İzin İlişkisi

Kullanıcı, sahibi olduğu görünüm için başkalarına kullanma yetkisi verirken, görünümün referans aldığı tablo(lar)ın da sahibi ise sadece görünüm için hak vermesi yeterli olacaktır. Eğer görünümün referans aldığı tablo ve görünümün kendisi aynı kulanıcıya ait değilse, görünüm üzerinden verilen izinlerin yanısıra tablo için de kişiye izin verilmesi gerekir. Böyle bir durum varsa görünümde izni olduğu halde tabloda izni olmayan bir kişi için haklarını kullanamaması söz konusu olur.

uysalme veritabanında bulunan Viewcredits görünümünde dilek'e select (seçme) hakkı verilsin:

Bu görünümün referans aldığı tablo kullanıcının veritabanında değil ve sahibi de kullanıcı değil, sahibi elifa kullanıcısı. Bu sebeple her ne kadar dilek'e görünüm için hak verilse de dilek'in görünümde sorgulama yapabilmesi için elifa kullanıcısına da kendi tablosunda dilek'e "select" hakkı vermelidir. dilek'in o tablo üzerindeki sorgulama işlemi şu şekilde olacaktır:

Görünüm Açıklamaları:

Bir görünümün tanımı ya da özellikleri öğrenilmek istenirse "SQL Server Enterprise Manager" kullanabilir ya da "Query Analyzer" 'da sistem tabloları sorgulanabilir.

"sysobjects" tablosunda görünüm isimleri;

"sysdepends" tablosunda referans alınan tablo isimleri;

"syscomments" tablosunda görünüm açıklamaları;

"syscolumns" tablosunda da görünümlerde yer alan "alan" isimleri bulunmaktadır.

Bir görünüm SQL dili ile oluşturulmuş metin halini görmek için "sp_helptext view_name" saklı yordamı kullanılabilir.

Örnek: Viewcredits view'inin SQL dili ile yazılmış metin halini görmek için şu uygulama yapılır:

Görünüm Açıklamalarının Gizlenmesi:

"Create view" ifadesinde WITH ENCRYPTION kullanarak o görünümün SQL dili ile yazılmış metin hali saklanabilir. Görünüm açıklamaları içeren "syscomments"sistem tablosunda o görünümün belirli bilgilerine otomatik olarak erişim engellenmiş olur. Bir görünümü şifrelenmiş halinden çıkıp eski haline dönmesi istenirse ya kaldırılıp tekrar yaratılmalıdır ya da "alter view" kullanılmalıdır. "syscomments" tablosunda  şifrelenmiş görünüm ile ilgili bilgileri o tablodan kesinlikle silmemek gerekir; çünkü daha sonra o görünümü yaratırken sorun çıkarır.

Örnek: LESSON1 tablosundan Viewlesson2 adında şifrelenmiş bir görünüm yaratılmak istenirse ve oluşan görünümün metin hali görülmek istenirse şu uygulama yapılabilir:

Görüldüğü gibi açıklamanın görülmesine izin verilmedi; çünkü görünüm oluşturulurken şifrelenmişti.

Bilgi Akışı Görünümleri:

Veritabanına yerleştirilmiş bütün veri nesnelerinin metadatalarını içerir. Information_schema öneki ile tanımlanır. 
 

  • Information_schema.tables: Veritabanındaki tabloların listesi 
     
  • Information_schema.columns: Veritabanında tanımlanmış sütunlar üzerindeki bilgiler 
     
  • Information_schema.tables_ privileges: Veritabanındaki tablolar için güvenlik bilgileri