Tablo yerine Görünüm ne zaman kullanılır?


108

Bir Görünüm, gerçek bir Tablo yerine ne zaman kullanılmalıdır? Bunun ne gibi kazanımları olmasını beklemeliyim?

Genel olarak, bir tablo üzerinde görünüm kullanmanın avantajları nelerdir? Tabloyu ilk bakışta görünmesi gerektiği gibi tasarlamam gerekmez mi?

Yanıtlar:


80

Oh, düşünmeniz gereken birçok farklılık var

Seçim için görünümler:

  1. Görünümler, tablolar üzerinden soyutlama sağlar. Temel şemanızı değiştirmeden bir görünümde alanları kolayca ekleyebilir / kaldırabilirsiniz.
  2. Görünümler, karmaşık birleşimleri kolayca modelleyebilir.
  3. Görünümler, veritabanına özgü bilgileri sizden gizleyebilir. Örneğin, Oracles SYS_CONTEXT işlevini veya başka birçok şeyi kullanarak bazı kontroller yapmanız gerekiyorsa
  4. GRANTS'ınızı gerçek tablolar yerine doğrudan görünümler üzerinden kolayca yönetebilirsiniz. Belirli bir kullanıcının yalnızca bir görünüme erişebileceğini biliyorsanız, yönetimi daha kolaydır.
  5. Görünümler, geriye dönük uyumluluk konusunda size yardımcı olabilir. Temel şemayı değiştirebilirsiniz, ancak görünümler bu gerçekleri belirli bir istemciden gizleyebilir.

Ekleme / güncellemeler için görünümler:

  1. Oracle'ın "WITH CHECK OPTION" yan tümcesi gibi işlevleri doğrudan görünümde kullanarak görünümlerle ilgili güvenlik sorunlarını çözebilirsiniz.

Dezavantajlar

  1. İlişkilerle ilgili bilgileri kaybedersiniz (birincil anahtarlar, yabancı anahtarlar)
  2. Görünüm, temeldeki birleşimlerini sizden gizlediği için, bir görünümü ekleyip güncelleyemeyeceğiniz belli değil

3
Kısa soru: Görüşler "kalıcı" mıdır yoksa sadece oturumun ömrü boyunca mı sürer? Nedeni soruyorum: Bazen uzun bir kod çalıştırmanın ortasında çöken bir sistemimiz var. Bunu, kodun bölümlerini ara sonuçları kaydeden ara tablolara ısırarak hafifletiyorum. Bu nedenle, sistem kod tamamlanmadan önce çalışırsa, yalnızca son kaydedilen geçici tablodan başlayarak almam gerekir. Aynı kalıcılığı sunuyorlarsa görünümleri kullanmaya geçebilirim. Aksi takdirde, aynı şeyi yapmaya devam edeceğim ve çalışmanın sonunda templeri düşüreceğim. Teşekkürler!
ouonomos

8
@ouonomos: Normal bir görünüm herhangi bir veri içermez. Bu sadece depolanmış bir SQL ifadesidir, yani temel alınan verilerin bir görünümüdür. Bazı veritabanları (örneğin Oracle, PostgreSQL), "görünümü" daha hızlı erişim için geçici olarak başka bir tabloda depolayan somutlaşmış görünümleri destekler. Bu, görünüm karmaşık olduğunda okuma erişimini hızlandırmak için yapılır. Ancak bu, sizin durumunuzda size yardımcı olmaz çünkü somutlaşmış bir görünüm kendi başına bir veri değil, yine de bir görünümdür. Yaklaşımınız muhtemelen iyidir.
Lukas Eder

44

Görünümler şunları yapabilir:

  • Karmaşık bir tablo yapısını basitleştirin
  • Hassas verileri filtrelemenize ve daha basit bir şekilde izinler atamanıza izin vererek güvenlik modelinizi basitleştirin
  • Çıktı yapısını değiştirmeden mantığı ve davranışı değiştirmenize izin verir (çıktı aynı kalır ancak temeldeki SELECT önemli ölçüde değişebilir)
  • Performansı artırın (Sql Sunucusu Endeksli Görünümler)
  • Aksi takdirde toplanması zor olabilecek görünümle özel sorgu optimizasyonu sunun

Ve görünümlere uygun tablolar tasarlamamalısınız . Temel modeliniz, verilerin verimli bir şekilde depolanması ve geri alınmasıyla ilgilenmelidir. Görünümler, kısmen, bu karmaşıklığı soyutlamanıza izin vererek verimli, normalleştirilmiş bir modelden kaynaklanan karmaşıklıkları azaltan bir araçtır.

Ayrıca, "tablo üzerinden görünüm kullanmanın avantajları nelerdir?" Diye sormak çok iyi bir karşılaştırma değildir. Masasız gidemezsin, ama manzarasız da yapabilirsin. Her biri çok farklı bir nedenle var. Tablolar somut modeldir ve Görünümler soyutlanmış bir görünümdür.


1
+1 Görünümler, kısmen, bu karmaşıklığı soyutlamanıza izin vererek verimli, normalleştirilmiş bir modelden kaynaklanan karmaşıklıkları azaltan bir araçtır.
metdos

34

Her seferinde karmaşık mantığın takip edilmesini sağlamanız gerektiğinde görünümler kabul edilebilir. Örneğin, tüm finansal raporlama için ihtiyaç duyulan ham verileri oluşturan bir görünüme sahibiz. Tüm raporların bu görünümü kullanmasını sağlayarak, bir rapor birleştirme kümesini kullanan bir rapor ve farklı sonuçlar veren bir rapor kullanmayı unutan bir rapor yerine, herkes aynı veri kümesiyle çalışıyor.

Kullanıcıları belirli bir veri alt kümesiyle sınırlandırmak istediğinizde görünümler kabul edilebilir. Örneğin, kayıtları silmezseniz ancak yalnızca geçerli olanı etkin ve eski sürümleri devre dışı olarak işaretlerseniz, bir görünümün yalnızca etkin kayıtları seçmek için kullanmasını istersiniz. Bu, insanların sorguya where cümlesini koymayı unutmasını ve kötü sonuçlar almasını engeller.

Görünümler, kullanıcıların yalnızca bir kayıt kümesine erişebilmelerini sağlamak için kullanılabilir - örneğin, belirli bir istemci için tabloların görünümü ve tablolarda hiçbir güvenlik hakkı olmaması, söz konusu istemcinin kullanıcılarının yalnızca verileri görebileceği anlamına gelebilir. o müşteri için.

Veritabanlarını yeniden düzenlerken görünümler çok faydalıdır.

Görünümleri çağırmak için görünümler kullandığınızda görünümler kabul edilemez, bu da korkunç performansa neden olabilir (en azından SQL Server'da). Neredeyse milyon dolarlık bir müşterimizi kaybettik çünkü birisi veritabanını bu şekilde soyutlamayı seçti ve performans korkunçtu ve sık sık zaman aşımları oldu. Performans sorunu tamamen bizim hatamız olduğundan, düzeltmenin bedelini müşteriye değil de ödemek zorunda kaldık. Görünümler görünümleri çağırdığında, temeldeki görünümü tamamen oluşturmaları gerekir. Bunu, görünümün bir görünümü çağıran bir görünüm olarak adlandırdığı ve kullanıcının nihayetinde ihtiyaç duyduğu üçünü görmek için milyonlarca kayıt oluşturulduğu yerde gördüm. Bu görünümlerden birinin kayıtların basit bir sayımını (*) yapmanın 8 dakika sürdüğünü hatırlıyorum. Görünümleri çağıran görünümler son derece kötü bir fikirdir.

Genellikle yalnızca aynı tablodaki alanları güncelleyebildiğiniz için görünümler genellikle kayıtları güncellemek için kötü bir fikirdir (yine bu SQL Server'dır, diğer veritabanları değişebilir). Bu durumda, hangi alanların kullanılabilir olduğunu bilmeniz için yine de tabloları doğrudan güncellemek daha mantıklıdır.


1
Görünüm arama görünümüyle ilgili bir performans sorunu olduğunu bilmiyordum. Bu tuhaf görünüyor. Bu, sorgu iyileştirici tarafından doğru şekilde işlenmiyor mu? Sizin durumunuzda SQL Server'ın hangi sürümü kullanıldı?
Patrick Honorez

7

Birkaç tablodan seçim yapmanız gerektiğinde veya sadece bir tablonun alt kümesini almak için görünümler kullanışlıdır.

Tablolarınızı, veritabanınız iyi bir şekilde normalize edilecek şekilde (minimum tekrarlama) tasarlamalısınız . Bu, sorgulamayı biraz zorlaştırabilir.

Görünümler , tablolardaki verileri depolandıklarından farklı şekilde görüntülemenize olanak tanıyan biraz ayrılıktır .


7

Yaygın bir uygulama, kullanıcıya daha normal olmayan bir veri modeli sunmak için birleşimleri gizlemektir. Diğer kullanımlar, güvenliği (örneğin belirli sütunları ve / veya satırları gizleyerek) veya performansı (somutlaştırılmış görünümler durumunda) içerir.


6

Tablonuzu görünümleri dikkate almadan tasarlamalısınız.
Birleşimleri ve koşulları kaydetmenin yanı sıra, Görünümlerin bir performans avantajı vardır: SQL Server, yürütme planını hesaplayıp görünümde kaydedebilir ve bu nedenle onu "anında" SQL ifadelerinden daha hızlı hale getirebilir.
View, alan düzeyinde kullanıcı erişimiyle ilgili çalışmanızı da kolaylaştırabilir.


5

Her şeyden önce, adından da anlaşılacağı gibi bir görüş değişmezdir. çünkü bir görünüm, DB'de depolanan bir sorgudan oluşturulan sanal tablodan başka bir şey değildir. Bu nedenle, bazı görünüm özelliklerine sahipsiniz:

  • verilerin yalnızca bir alt kümesini gösterebilirsiniz
  • birden çok tabloyu tek bir görünümde birleştirebilirsiniz
  • verileri bir görünümde toplayabilirsiniz (sayıyı seçin)
  • görünüm aslında veri tutmaz, temel tabloların sanal toplamaları oldukları için herhangi bir tablo alanına ihtiyaç duymazlar

Bu nedenle, görünümlerin tablolardan daha uygun olduğu çok sayıda kullanım durumu vardır, yalnızca bir web sitesinde yalnızca aktif kullanıcıları görüntülemeyi düşünün. bir görünüm daha iyi olur, çünkü aslında DB'nizde bulunan verilerin yalnızca bir alt kümesinde çalışırsınız (etkin ve etkin olmayan kullanıcılar)

bu makaleye göz atın

umarım bu yardımcı olmuştur ..


2

Wikipedia'ya göre ,

Görünümler, tablolara göre birçok avantaj sağlayabilir:

  • Görünümler, bir tabloda yer alan verilerin bir alt kümesini temsil edebilir .
  • Görünümler , temel tabloların dış dünyaya gösterilme derecesini sınırlayabilir : belirli bir kullanıcının, temel tablonun geri kalanına erişimi reddedilirken görünümü sorgulama izni olabilir.

  • Görünümler, birden çok tabloyu tek bir sanal tablo halinde birleştirebilir ve basitleştirebilir .

  • Görünümler , veritabanı motorunun verileri topladığı (toplam, ortalama vb.) Ve hesaplanan sonuçları verilerin bir parçası olarak sunduğu birleştirilmiş tablolar olarak işlev görebilir .

  • Görünümler, verilerin karmaşıklığını gizleyebilir . Örneğin, bir görünüm Sales2000 veya Sales2001 olarak görünebilir ve gerçek temel tabloyu şeffaf bir şekilde bölümlere ayırabilir.

  • Görünümlerin depolanması çok az yer kaplar ; veritabanı, sunduğu tüm verilerin bir kopyasını değil, yalnızca bir görünümün tanımını içerir.

  • Görünümler, kullanılan SQL motoruna bağlı olarak ekstra güvenlik sağlayabilir .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.