View Nedir?
SQL’deki view’lar bir tür sanal tablodur. Bir view, veritabanındaki normal bir tabloda olduğu gibi satırlara ve sütunlara sahiptir. Veritabanında bulunan bir veya daha fazla tablodan alanlar seçerek bir view oluşturabilirsiniz. SQL veritabanlarındaki tablolara benzer şekilde davranan ancak aslında fiziksel bir varlık olmayan bu yapılar, veritabanı yönetim sistemi (DBMS) tarafından oluşturulan bir sorgu sonucu olarak görünürler.
SQL view’lar, aşağıdaki durumlar için kullanışlı olabilir:
- Veri Gizleme ve Güvenlik: Belirli kullanıcılara veya uygulamalara sadece belirli sütunları veya satırları göstermek için view’lar kullanılabilir. Bu şekilde, kullanıcılar sadece ihtiyaç duydukları verilere erişebilirler.
- Karmaşık Sorguların Basitleştirilmesi: Gelişmiş sorgular veya birleştirilmiş tablolar üzerinde yapılan karmaşık işlemleri basitleştirmek için view’lar kullanılabilir. Bu sayede kullanıcılar, karmaşık sorguları tekrar tekrar yazmak yerine, view’ı sorgulayarak işlem yapabilirler.
- Veri Yapısının Standartlaştırılması: Bir veri tabanında bulunan veri yapısını standartlaştırmak için view’lar kullanılabilir. Belirli bir görünüm, bir veritabanında tutulan farklı tablolar arasında birleştirilmiş veya işlenmiş verilere erişimi sağlar.
- Veri Değişikliklerini Yönetme: Viwe’lar, veri tabanındaki fiziksel değişikliklere karşı dirençli olabilir. Örneğin, bir görünümde kullanılan sütun adları değişse bile, görünüm tanımı güncellenmedikçe görünüm üzerindeki sorgular çalışmaya devam edebilir.
View Tanımlama
Bir view aşağıdaki şekilde tanımlanır:
CREATE VIEW view_name AS SELECT column1, column2, ... FROM table1 WHERE condition;
Bu ifadede WHERE koşulu view’ın hangi verilerden oluşacağını belirler.
View’lar Güncellenebilir mi?
Geleneksel SQL view’lar genellikle tek bir tabloya veya birleştirilmiş tablolara dayanır ve genellikle güncellenemezler. Yani, bir view üzerinde yapılan değişiklikler doğrudan tablolara yansıtılamaz.
Materialized view’lar, şu şekilde oluşturulur:
CREATE MATERIALIZED VIEW matview_name AS SELECT column1, column2, ... FROM table1 WHERE condition;
UPDATE ON REFRESH
UPDATE ON REFRESH ifadesi bir Materialized view’lar için güncelleme stratejisini belirten bir ifadedir. Bu ifade, Materialized view’ın nasıl güncelleneceğini ve verilerin nasıl yeniden hesaplanacağını belirler.
Materialized view’lar, bir sorgunun sonuçlarını fiziksel tablolarda tutabilirler ancak, bu veriler zamanla güncellenmeye ihtiyaç duyabilir ve bu noktada REFRESH
işlemi devreye girer.
Örnek bir REFRESH kullanımı aşağıdaki şekilde olabilir:
CREATE MATERIALIZED VIEW matview_name AS SELECT column1, column2, ... FROM table1 WHERE condition WITH [NO] DATA REFRESH [FAST | COMPLETE] [ON [COMMIT | DEMAND] | SCHEDULE expression];
REFRESH FAST
veyaREFRESH COMPLETE
: Materialized view’ın hızlı mı yoksa tam mı güncelleneceğini belirler.ON COMMIT
veyaON DEMAND
: Materialized view’ın ne zaman güncelleneceğini belirler.ON COMMIT
, her işlem sonucunda güncelleme yapar.ON DEMAND
, manuel olarak güncelleme yapar.SCHEDULE expression
: Materialized view’ı belirli bir zaman aralığında güncellemek için bir zaman ifadesi sağlar.
Refresh sorgularında materialized view’ı locklanır ve refresh sırasında materialized view kullanılamaz. Lock senaryoları aşağıdaki gibidir:
- REFRESH FAST ON COMMIT (Hızlı Yenileme İşlemi, Transaction Sonunda):
- Bu durumda, materialized view işlem sonunda güncellenir. Bu sırada tablonun kısa süreli kilitlenmesi söz konusu olabilir.
- REFRESH FAST ON DEMAND (Hızlı Yenileme İşlemi, Manuel):
- Materialized view’ı manuel olarak tetiklediğinizde güncellenir ve bu sırada da tablo kısa süreliğine kilitlenebilir.
- REFRESH COMPLETE ON COMMIT veya ON DEMAND (Tam Yenileme):
- Tam yenileme işlemi sırasında, materialized view’ın tüm verileri silinip yeniden oluşturulacağı için tablo genellikle daha uzun bir süreliğine kilitlenir.
Complete Refresh hakkında Oracle dökümantasyonu için tıklayabilirsiniz.
Materialized view’lar kendi kendini refresh edebilir. Bunun için veritabanında belirli periyotlarla çalışan dbms_job oluşturur.