SQL görünümlerini kullanmak için iyi bir neden nedir?


102

SQL Server 2008 İncilini okuyorum ve görüşler bölümünü ele alıyorum. Ancak yazar , görüşlerin amacını gerçekten açıklamıyor . Görünümler için iyi kullanım nedir? Bunları web sitemde kullanmalı mıyım ve faydaları nelerdir?


"SQL Server 2008 Bible" kitabının veritabanı dosyalarını bana verir misiniz? Yazarın web sitesi kapandı ve ona ulaşamıyorum.

Yanıtlar:


94

Önceki yanıtların hiçbirinin bahsetmediği başka bir kullanım, tablo yapısı değişikliklerinin daha kolay dağıtılmasıdır.

Diyelim ki, T_OLDaktif kullanıcılar için veri içeren bir tabloyu ( ) kullanımdan kaldırmak ve bunun yerine benzer verilere sahip (adlandırılmış T_NEW) ancak hem aktif hem de pasif kullanıcılar için verileri olan ve fazladan bir sütun içeren yeni bir tablo kullanmak istiyorsunuz active.

Sistem (ler) inizde bunu yapan gazilyon sorgu varsa, kullanıma sunma SELECT whatever FROM T_OLD WHERE whateveriçin iki seçeneğiniz vardır:

1) Cold Turkey - DB'yi değiştirin ve aynı zamanda söz konusu sorguyu içeren çok sayıda kodu değiştirin, test edin ve serbest bırakın. Yapması (hatta koordine etmesi) ÇOK zor, çok riskli. Kötü.

2) kademeli - oluşturarak DB değiştirmek T_NEW, tablo bırakarak T_OLDtablo ve bunun yerine bir oluşturma GÖRÜNÜMÜ adı T_OLDtaklit eden T_OLDtablo,% 100 (örneğin, görünüşüdür sorgu SELECT all_fields_except_active FROM T_NEW WHERE active=1).

Yani o anda seçer HERHANGİ kod bırakmadan korunmuş olacaktır T_OLDve göç yasasında değişiklik yapmak T_OLDiçin T_NEWboş.

Bu basit bir örnek, daha çok işin içinde olan diğerleri var.

PS Öte yandan, doğrudan sorgular yerine muhtemelen bir saklı yordam API'sine sahip olmanız gerekirdi T_OLD, ancak bu her zaman böyle değildir.


3
"Depolanan prosedür API" terimini ve ilgili artıları / eksileri bilmiyordum
Jeff Widman

Üzgünüm partiye geç kaldım, peki ya performans. Orijinal masada katılımlara ihtiyacım olursa ve bunun yerine Görünüm'e katılırsam, en iyi yürütme planını kullanır mı?
Zikato

@Zikato evet, eğer endekslenmiş
görünümse

V Good Indication
Afnan Ahmad

47

(Bir Google aramasında ortaya çıkan ilk eğiticiden kopyalandı (bağlantı artık öldü), ancak kendim manuel olarak yazacağım tüm faydalara sahip.)

Görüntülemelerin aşağıdaki faydaları vardır:

  • Güvenlik - Temel tablolara doğrudan erişilemezken görünümler kullanıcılar için erişilebilir hale getirilebilir. Bu, DBA'nın kullanıcılara yalnızca ihtiyaç duydukları verileri verirken aynı tablodaki diğer verileri korumasına olanak tanır.
  • Basitlik - Görünümler, karmaşık sorguları gizlemek ve yeniden kullanmak için kullanılabilir.
  • Sütun Adının Basitleştirilmesi veya Netleştirilmesi - Görünümler, sütun adlarını daha akılda kalıcı ve / veya anlamlı kılmak için takma adlar sağlamak için kullanılabilir.
  • Basamak Taşı - Görünümler, "çok seviyeli" bir sorgu için bir basamak oluşturabilir. Örneğin, her satış görevlisinin yaptığı satışların sayısını sayan bir sorgu görünümü oluşturabilirsiniz. Daha sonra, satış elemanlarını yaptıkları satış sayısına göre gruplandırmak için bu görünümü sorgulayabilirsiniz.

Cevabınızı beğendiğim için ve başka bir noktayı ekleyen çok fazla nokta görmediğim için, listenize iki ekleme önerebilir miyim? Dizine Alınmış Görünümler, performans artışı sağlayabilir. Tablolara yerine direkt daha görüşlere karşı güncelleştirmeleri Koşu yanlış anahtar üretim tablosunu :) güncelleme olmayacak yüksek güven verebilir
David Hall

Listenizdeki bir nokta daha, çoğu DBA görünümün kullanılmasını ister çünkü bir görünümü ayarlayabilirler ve çoğunlukla (her zaman değil) bu görünümü kullanan tüm sorgular ayarlanacaktır.
Nitin Midha

Bu, kitabımdaki% 99 cevaptır.
John Steedman

BTW @David bozuk bağlantı
Manuel Jordan

Son nokta, bunun için geçici bir tablo kullanamaz mıyız?
Jiechao Wang

16

Wikipedia'dan bazı nedenler :

Görünümler, tablolara göre avantajlar sağlayabilir:

  1. Görünümler, bir tabloda yer alan verilerin bir alt kümesini temsil edebilir
  2. Görünümler, birden çok tabloyu tek bir sanal tabloda birleştirebilir ve basitleştirebilir
  3. 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
  4. 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
  5. 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
  6. Kullanılan SQL motoruna bağlı olarak, görünümler ekstra güvenlik sağlayabilir
  7. Görünümler, bir tablonun veya tabloların dış dünyaya maruz kalma derecesini sınırlayabilir

14

GÖRÜNÜMLER, SEÇME / KOD'un yeniden kullanılabilir bölümleri olarak kullanılabilir, bunlar birleştirilecek diğer seçimler / sorgulara dahil edilebilir ve her seferinde tüm SELECT'i yeniden oluşturmak zorunda kalmadan çeşitli farklı filtreler kullanabilir.

Bu aynı zamanda mantığı tek bir konuma yerleştirir, böylece onu kod tabanının tamamında değiştirmek zorunda kalmazsınız.

Bir bak bakalım

Depolanan Prosedürler, Fonksiyonlar, Görünümler, Tetikleyiciler, Satır İçi SQL Arasındaki Seçim

Bir görünümün ana güzelliği, çoğu durumda bir masa gibi kullanılabilmesidir, ancak bir tablodan farklı olarak, çok karmaşık hesaplamaları ve yaygın olarak kullanılan birleştirmeleri kapsayabilir. Ayrıca, saklı yordamlar dışında, veritabanındaki hemen hemen her nesneyi kullanabilir. Görünümler, her zaman aynı tablo kümesine katılmanız gerektiğinde, özet hesaplama alanları vb. Almak için Sipariş Ayrıntıları içeren bir Sipariş dediğinizde en kullanışlıdır.


6
Bunu yaparken çok dikkatli olun. Diğer görünümleri çağıran görünümler kullanırsanız, büyük bir performans karmaşası yaratabilirsiniz.
HLGEM

bunu bir yöntem oluşturarak ve SQL sorgusunu yöntemin içine yerleştirerek yapabilirsiniz. Bu yöntem her seferinde yeniden kullanılabilir. Öyleyse neden görmek ???
ASharma7

11

Bir görünüm bir soyutlama katmanıdır ve veritabanı şemasını kapsüllemek ve sizi dahili uygulama ayrıntılarını değiştirmenin sonuçlarından korumak dahil olmak üzere herhangi bir iyi soyutlama katmanının yaptığı şeyi yapar.

Bu bir arayüz.


1
Daha fazla soyutlama için görünümleri görünümler üzerine yığmadığınız sürece.
HLGEM

İlişkisel veritabanlarında her türlü çok düzeyli soyutlamayı etkili bir şekilde reddettiğimi düşünüyorum. Ve saklı yordamları da saklı yordamlardan çağırmıyorum. :)
dkretz

3

Bir varlığı bazı kriterlere göre sınırlamak için görünümlerin kullanılmasının çok yaygın bir kullanımı.

Tablo: KULLANICILAR tüm kullanıcıları içerir

Görünüm: ACTIVE_USERS, askıya alınan, yasaklanan, etkinleştirilmeyi bekleyen ve gelecekte aktif gereksinimlerin bir parçası olarak tanımlayabileceğiniz herhangi bir kriteri karşılamayanlar hariç tüm kullanıcıları içerir. Bu, ACTIVE_USERS istenmeyen satırları her zaman gizleyebildiğinden, kullanmamayı seçerseniz USERS tablonuzdan herhangi bir satırı silmenizi gereksiz kılar.

Bu şekilde, tabloyu kullanıcı yönetimi sayfalarınızda kullanabilirsiniz, ancak uygulamanın geri kalanı, işlemleri yürütebilecek ve verilere erişebilecek / değiştirebilecek tek kullanıcılar olabileceğinden ACTIVE_USERS kullanabilir.


2

Görünümler, birkaç farklı tablodaki verileri birleştirmenize ve biçimlendirmenize (alanları birleştirmenize, daha anlamlı alan adları vermenize vb.) İzin vererek son kullanıcılar için daha kolay olmasını sağlayabilir. Veritabanı modelinin bir soyutlamasıdır. Ayrıca, tablonun kendisine doğrudan erişim sağlamadan kullanıcılara tablodaki verilere erişim sağlamak için de kullanılabilirler.


2

Doğrudan tablo yerine görünümü kullanmanın birçok nedenini burada bulabilirsiniz

  • Basitlik - Görünümler, karmaşık sorguları gizlemek için kullanılabilir.
  • Güvenlik - Görünüm, seçilen bazı sütunlarda görünüm oluşturarak bazı önemli bilgileri son kullanıcıdan gizleyebilir
  • Güvenlik - Görünümü kullanarak yapısını değiştirmek için güvenli tabloyu.
  • Yedeklilik - Ortak bir görünüm kullanarak her prosedürde / sorguda fazlalık kodu azaltın.
  • Hesaplama - Tüm hesaplamalar görünüm sorgusunda bir kez yapılabilir.
  • Anlamlı Ad - Tablo, tbl_org_emp_id gibi [Çalışan No] gibi bir takma ad veya anlamlı bir ad olabilir.

Gönderen imexploring.com


1

Yaygın nedenlerin / kullanımların küçük bir listesi:

  • verilerin biçimini veya 'görünümünü' değiştirmek için bunları kullanın (yani bir adı ve soyadını birleştirebilirsiniz)

    veriler üzerinde hesaplamalar veya diğer aramalar yapmak

    verileri denormalize edin (birkaç tablodan verileri tek bir noktaya çıkarın)


-6

Görüşler kötüdür! Mümkünse bunlardan kaçının ve yalnızca DVK'da belirtilen nedenle kullanın - geçici veri taşıma.

100 tablo içeren bir veritabanında her tablonun amacını hatırlamanın zor olduğunu anlamalısınız. Şimdi, buraya 300 görünüm daha eklerseniz, tam bir karmaşa olacaktır. 'Görünüm severler' iç içe görünümleri kullanma eğilimindedir ve daha sonra depolanan prosedürlerde iç içe görünümleri kullanır. Ben şahsen, 4 kez derinlemesine iç içe geçmiş Görünümlerin olduğu bir veritabanıyla çalışıyorum! Bu nedenle, bir saklı yordamın en basit mantığını anlamak için önce tüm görünümlerin üzerinden geçmem gerekir.


8
-1 Görünümler iyidir. Onlar olabilir Eğer uygunsuz bunları kullanmak eğer kötülük haline - ama bu sadece bir şey hakkında doğru.
NullUserException

1
Kötü kullanılırsa görünümler kötü olabilir. Bunları en sık kullanan kişiler, onları bir şeyleri soyutlamak için kullanan ve sonra sizin söylediğiniz gibi yapanlar gibi görünüyorlar, bir sonucu döndürmeden önce 10 milyon reklama gerçekleştirmeniz gerekebileceği noktaya görüşleri çağıran görüşleri çağıran görüşleri çağırın. 3 set. Doğrudan çağıran tablolar çok yararlı olabilir.
HLGEM

@HGLEM, diğer görünümlerden gelen görüşmeleri kısıtlamanın bir yolu var mı?
Igor Soloydenko
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.