Yanıtlar:
Bir görünüm çeşitli faydalar sağlar.
1. Görünümler karmaşıklığı gizleyebilir
Birden fazla tabloya katılmayı gerektiren veya karmaşık mantık veya hesaplamalar içeren bir sorgunuz varsa, tüm bu mantığı bir görünüme kodlayabilir ve ardından tıpkı bir tablo gibi görünümden seçim yapabilirsiniz.
2. Görünümler bir güvenlik mekanizması olarak kullanılabilir
Bir görünüm, bir tablodan (veya tablolardan) belirli sütunları ve / veya satırları ve altta yatan tablolar yerine görünümde ayarlanan izinleri seçebilir. Bu, yalnızca bir kullanıcının görmesi gereken verileri ortaya çıkarmaya izin verir.
3. Görünümler, eski kodu desteklemeyi basitleştirebilir
Çok sayıda kodu kıracak bir tabloyu yeniden etkinleştirmeniz gerekiyorsa, tabloyu aynı adla değiştirebilirsiniz. Gerçek şema değişirken, görünüm orijinal tabloyla tamamen aynı şemayı sağlar. Bu, tabloya başvuran eski kodun kırılmasını önler ve boş zamanlarınızda eski kodu değiştirmenize olanak tanır.
Bunlar, görünümlerin nasıl yararlı olabileceğine dair birçok örnekten sadece birkaçıdır.
Diğer şeylerin yanı sıra güvenlik için de kullanılabilir. "Müşteri" tablonuz varsa, tüm satış çalışanlarınıza ad, adres, posta kodu vb. Alanlara erişim izni vermek isteyebilirsiniz, ancak credit_card_number değil. Yalnızca erişmeleri gereken sütunları içeren bir görünüm oluşturabilir ve ardından görünümde erişmelerine izin verebilirsiniz.
Select name, address, zipcode from customer
bunun yerine amaca hizmet etmez creating a view
mi?
select * from customer
her şeye erişmelerini sağlayan çalışabilirler . Tabloya değil, görünüme erişim izni verirseniz, görünümde olmayan alanlara erişemezler.
Görünüm, bir sorgunun kapsüllenmesidir. Görünümlere dönüştürülen sorgular karmaşık olma eğilimindedir ve bu nedenle bunları yeniden kullanım için bir görünüm olarak kaydetmek avantajlı olabilir.
Genellikle raporlama amacıyla sık sık kullanılan verileri normalleştirmek ve / veya toplamak için görünümler oluştururum.
DÜZENLE
Ayrıntılı olarak, bazı varlıkların kişi, şirket, rol, sahip türü, sipariş, sipariş detayı, adres ve telefon olduğu bir veritabanım olsaydı, kişi tablosunun hem çalışanları hem de kişileri ve adresi sakladığı ve telefon masaları hem kişiler hem de şirketler için telefon numaralarını depoladı ve geliştirme ekibine, çalışanlara göre satışlar veya müşteriye göre satışlar veya bölgeye göre satışlar, aylık satışlar gibi raporlar oluşturma (veya raporlama verilerini geliştiriciler tarafından erişilebilir hale getirme) görevi verildi. , devlet tarafından müşteriler, vb Ben gerçek dünya varlıklarının daha entegre bir görünüm (hiçbir cinas amaçlanan) kullanılabilir böylece veritabanı varlıkları arasındaki ilişkileri de-normalize bir dizi görünüm oluşturmak istiyorum. Avantajlardan bazıları şunları içerebilir:
Çeşitli nedenler: Karmaşık birleşimleriniz varsa, bazen herhangi bir erişimin her zaman birleştirmelere doğru olması ve geliştiricilerin ihtiyaç duydukları tüm tabloları hatırlaması gerekmemesi için bir görüşe sahip olmak en iyisidir. Genellikle bu, tüm finansal raporların aynı veri kümesine dayanmasının son derece önemli olduğu bir finansal uygulama için olabilir.
Gördüğü kayıtları sınırlamak istediğiniz kullanıcılarınız varsa, bir görünümü kullanabilir, yalnızca temel tablolara değil yalnızca görünüme erişmelerine izin verebilir ve ardından görünümü sorgulayabilirsiniz.
Kristal raporlar, saklanan procs için görünümleri kullanmayı tercih ediyor gibi görünüyor, bu nedenle çok fazla rapor yazımı yapan insanlar çok fazla görüntüleme kullanıyor
Görünümler veritabanlarını yeniden düzenlerken de çok kullanışlıdır. Değişikliği genellikle bir görünüm oluşturarak eski kodun görmemesi için gizleyebilirsiniz. Yeniden düzenleme için çok güçlü bir yol olduğu için nasıl çalıştığını görmek için veritabanlarını yeniden düzenleme hakkında okuyun.
Saklı yordam üzerinde bir görünümün en büyük avantajı, tıpkı bir tablo kullandığınız gibi bir görünüm kullanabilmenizdir. Yani, bir görünüm doğrudan FROM
bir sorgunun yan tümcesinde ifade edilebilir . Ör SELECT * FROM dbo.name_of_view
.
Hemen hemen her şekilde depolanmış prosedürler daha güçlüdür. Sen dahil parametrelerinde geçebilir out
yapabileceğiniz, etkili aynı anda birden değerlere dönmesine izin parametreleri SELECT
, INSERT
, UPDATE
ve DELETE
işlemleri vs. vs.
Bir Görünüm'ün FROM
yan tümceden sorgulama yeteneğini istiyorsanız , ancak parametreleri de iletmek istiyorsanız, bunu da yapmanın bir yolu vardır. Buna tablo değerli işlev denir.
İşte konuyla ilgili oldukça faydalı bir makale:
EDIT: Bu arada, bu tür bir soru ortaya çıkarır, bir görünüm tablo değerli bir işlevi üzerinde ne gibi bir avantajı var? Buna gerçekten iyi bir cevabım yok, ancak bir görünüm oluşturmak için T-SQL sözdiziminin tablo değerli bir işlevden daha basit olduğunu ve veritabanınızın kullanıcılarının görünümlere daha aşina olabileceğini unutmayın.
ORM'niz ve masalarınız arasında iyi bir "orta adam" olarak işlev görebilir.
Misal:
Üzerindeki yapıyı değiştirmemiz gereken bir Person tablonuz vardı, böylece SomeColumn sütunu başka bir tabloya taşınacaktı ve bir-çok ilişkisi olacaktı.
Bununla birlikte, sistemin kişi ile ilgili olarak, SomeColumn'u hala tek bir şey olarak kullandı, pek çok şey değil. Biz, bazı sütunları bir araya getirmek ve güzel çalıştı görünüm koymak için bir görünüm kullandık.
Bu, veri katmanının değiştiği, ancak iş gereksiniminin temelde değişmediği için işe yaradı, bu nedenle iş nesnelerinin değişmesine gerek yoktu. Eğer iş nesneleri değişmek zorunda kalırsa, bunun uygulanabilir bir çözüm olacağını düşünmüyorum, ama görüş kesinlikle iyi bir orta nokta olarak işlev görüyor.
Belirli Veri Görünümlerine Odaklanmak, kullanıcıların kendilerini ilgilendiren belirli verilere ve sorumlu oldukları belirli görevlere odaklanmalarına olanak tanır. Gereksiz veriler görünüm dışında bırakılabilir. Bu ayrıca verilerin güvenliğini artırır, çünkü kullanıcılar temelde tablodaki verileri değil, yalnızca görünümde tanımlanan verileri görebilirler. Görünümleri güvenlik amacıyla kullanma hakkında daha fazla bilgi için bkz. Görünümleri Güvenlik Mekanizması Olarak Kullanma.
Veri Manipülasyonunu Basitleştirmek için Görünümler, kullanıcıların verileri nasıl manipüle ettiğini basitleştirebilir. Sık kullanılan birleşimleri, projeksiyonları, UNION sorgularını ve SELECT sorgularını görünüm olarak tanımlayabilirsiniz, böylece kullanıcılar bu veriler üzerinde her ek işlem yapıldığında tüm koşulları ve nitelikleri belirtmek zorunda kalmazlar. Örneğin, raporlama amacıyla kullanılan ve bir grup tablodan veri almak için alt sorgular, dış birleşimler ve toplama gerçekleştiren karmaşık bir sorgu görünüm olarak oluşturulabilir. Rapor her oluşturulduğunda temel sorgunun yazılması veya gönderilmesi gerekmediğinden görünüm verilere erişimi kolaylaştırır; bunun yerine görünüm sorgulanır. Verileri değiştirme hakkında daha fazla bilgi için.
Ayrıca mantıksal olarak parametreli görünümler veya WHERE yan tümcesi arama koşullarında parametreleri olan görünümler olarak çalışan satır içi kullanıcı tanımlı işlevler de oluşturabilirsiniz. Daha fazla bilgi için bkz. Satır İçi Kullanıcı Tanımlı İşlevler.
Veri Görünümlerini Özelleştirmek için, aynı kullanıcıların aynı anda kullanıyor olsalar bile farklı kullanıcıların verileri farklı şekillerde görmesine olanak tanır. Bu, özellikle farklı ilgi alanlarına ve beceri düzeylerine sahip kullanıcılar aynı veritabanını paylaştığında avantajlıdır. Örneğin, yalnızca bir hesap yöneticisinin anlaşma yaptığı müşteriler için verileri alan bir görünüm oluşturulabilir. Görünüm, görünümü kullanan hesap yöneticisinin oturum açma kimliğine göre hangi verilerin alınacağını belirleyebilir.
Verileri Dışa ve İçe Aktarma Görünümler, verileri diğer uygulamalara aktarmak için kullanılabilir. Örneğin, satış verilerini Microsoft® Excel kullanarak analiz etmek için publar veritabanındaki mağaza ve satış tablolarını kullanmak isteyebilirsiniz. Bunu yapmak için mağazalara ve satış tablolarına dayalı bir görünüm oluşturabilirsiniz. Daha sonra görünüm tarafından tanımlanan verileri vermek için bcp yardımcı programını kullanabilirsiniz. Veriler, satırların INSERT ifadesi kullanılarak görünüme eklenebilmesi koşuluyla, bcp yardımcı programı veya BULK INSERT ifadesi kullanılarak veri dosyalarından belirli görünümlere aktarılabilir. Görünümlere veri kopyalama kısıtlamaları hakkında daha fazla bilgi için, bkz. INSERT. Bir görünüme ve bir görünümden veri kopyalamak için bcp yardımcı programını ve BULK INSERT deyimini kullanma hakkında daha fazla bilgi için, bkz: Görünüme Kopyalama veya Görünümden Kopyalama.
Bölümlenmiş Verileri Birleştirmek İçin Transact-SQL UNION kümesi işleci, ayrı tablolardan iki veya daha fazla sorgunun sonuçlarını tek bir sonuç kümesinde birleştirmek için bir görünüm içinde kullanılabilir. Bu, kullanıcıya bölümlenmiş görünüm adı verilen tek bir tablo olarak görünür. Örneğin, bir tablo Washington için satış verileri ve başka bir tablo Kaliforniya için satış verileri içeriyorsa, bu tabloların BİRLİĞİ'nden bir görünüm oluşturulabilir. Görünüm, her iki bölge için satış verilerini temsil eder. Bölümlenmiş görünümleri kullanmak için, her bir tabloya eklenebilecek veri aralığını belirlemek üzere bir kısıtlama belirleyerek birkaç özdeş tablo oluşturursunuz. Bu görünüm daha sonra bu temel tablolar kullanılarak oluşturulur. Görünüm sorgulandığında, SQL Server sorgudan hangi tabloların etkilendiğini otomatik olarak belirler ve yalnızca bu tablolara başvurur. Örneğin, bir sorgu yalnızca Washington eyaleti için satış verilerinin gerekli olduğunu belirtirse, SQL Server yalnızca Washington satış verilerini içeren tabloyu okur; başka tabloya erişilmez.
Bölümlenmiş görünümler, yalnızca aynı veritabanındaki tabloları değil, uzak sunucular gibi birden çok heterojen kaynaktan gelen verileri temel alabilir. Örneğin, her biri kuruluşunuzun farklı bir bölgesi için veri depolayan farklı uzak sunuculardaki verileri birleştirmek için, her veri kaynağından veri alan dağıtılmış sorgular oluşturabilir ve sonra bu dağıtılmış sorgulara dayalı bir görünüm oluşturabilirsiniz. Tüm sorgular, sorgu tarafından istenen verileri içeren uzak sunuculardaki tablolardan yalnızca verileri okur; görünümdeki dağıtılmış sorgular tarafından başvurulan diğer sunuculara erişilmez.
Verileri birden çok tabloya veya birden çok sunucuya böldüğünüzde, taranacak daha az veri olduğu için verilerin yalnızca bir kısmına erişen sorgular daha hızlı çalışabilir. Tablolar farklı sunucularda veya birden fazla işlemciye sahip bir bilgisayarda bulunuyorsa, sorguya dahil olan her tablo paralel olarak taranabilir ve böylece sorgu performansını artırabilir. Ayrıca, dizinleri yeniden oluşturma veya bir tabloyu yedekleme gibi bakım görevleri daha hızlı gerçekleştirilebilir. Bölümlenmiş bir görünüm kullanarak, veriler yine de tek bir tablo olarak görünür ve doğru alttaki tabloya elle başvurmak zorunda kalmadan bu şekilde sorgulanabilir.
Bu koşullardan biri karşılanırsa bölümlenmiş görünümler güncelleştirilebilir: INSTEAD OF tetikleyicisi görünümde INSERT, UPDATE ve DELETE deyimlerini desteklemek için mantıkla tanımlanır.
Hem görünüm hem de INSERT, UPDATE ve DELETE deyimleri, güncelleştirilebilir bölümlenmiş görünümler için tanımlanan kurallara uyar. Daha fazla bilgi için bkz. Bölümlenmiş Görünüm Oluşturma.
https://technet.microsoft.com/en-us/library/aa214282(v=sql.80).aspx#sql:join
İşte iki yaygın neden:
Güvenlik için kullanabilirsiniz. Ana tabloya izin vermeyin ve sütun veya satır erişimini sınırlayan görünümler oluşturun ve kullanıcılara görünümü görmeleri için izin verin.
Kolaylık sağlamak için kullanabilirsiniz. Görünümde her zaman birlikte kullandığınız bazı tabloları birleştirin. Bu, sorguları tutarlı ve kolay hale getirebilir.
Bunu yapmak için birden fazla neden var. Bazen tüm birleştirme yerine bir tablo adını sorgulayabildiğinden, ortak birleştirme sorgularını kolaylaştırır.
Diğer bir neden ise verileri farklı kullanıcılarla sınırlamaktır. Örneğin:
Tablo1: Sütunlar - USER_ID; USERNAME; SSN
Yönetici kullanıcıların gerçek tabloda özel hakları olabilir, ancak SSN'yi söylemek için erişim sahibi olmak istemediğiniz kullanıcılar,
SELECT OLARAK KULLANICI ADLARINI OLUŞTURUN user_id, kullanıcı adı FROM1'den;
Ardından tabloya değil, görünüme erişmeleri için kendilerine özel izinler verin.
Eski veritabanları hakkında raporlama yaparken görüşler bir nimet olabilir. Özellikle, şifreli 5 harfli adlar (bunlardan 2'si ortak bir önektir!) Yerine o zamanki mantıklı geldiğim kısaltmalarla dolu sütun adlarını kullanabilirsiniz.
Genelde hayatı kolaylaştırmak, birden fazla tablo üzerinde depolanan bazı varlıklardan genişletilmiş ayrıntılar almak (okunabilirliği artırmak için koddaki birleşimleri ortadan kaldırmak) ve bazen birden fazla veritabanında veri paylaşmak veya hatta ekleri okumayı kolaylaştırmak için görünümlere giderim.
Bir kullanıcının tabloda güncelleyebileceği sütunları sınırlamak için bir görünümle birlikte izinleri nasıl kullanacağınız aşağıda açıklanmıştır.
/* This creates the view, limiting user to only 2 columns from MyTestTable */
CREATE VIEW dbo.myTESTview
WITH SCHEMABINDING AS
SELECT ID, Quantity FROM dbo.MyTestTable;
/* This uses the view to execute an update on the table MyTestTable */
UPDATE dbo.myTESTview
SET Quantity = 7
WHERE ID = 1
Tablo (lar) ın ve / veya görünümün (salt okunur şekilde) anlık görüntüsünü görmek istediğimde
Yalnızca bir sorgu çalıştırırken saklı yordamlar üzerinde görünümlerini kullanmak istiyorum. Görünümler ayrıca güvenliği basitleştirebilir, birden çok tabloya ekleme / güncelleme işlemlerini kolaylaştırmak için kullanılabilir ve verilerin anlık görüntüsünü almak / gerçekleştirmek için kullanılabilir (uzun süren bir sorgu çalıştırın ve sonuçları önbelleğe alın).
Gerçek zamanlı olarak doğru tutulması gerekmeyen çalışma özlem sorguları için materyalize görünümler kullandım.
Bu, sorunuza tam olarak cevap vermiyor ancak Materyalize Görüşlerden bahsetmeye değer olacağını düşündüm . Deneyimlerim çoğunlukla Oracle ile ilgili ancak sözde SQL Server oldukça benzer.
XML performans sorunlarını ele almak için mimarimizde benzer bir şey kullandık. Sistemlerimiz, bir satırda XML olarak depolanan birçok veri ile tasarlanmıştır ve uygulamaların içindeki belirli değerleri sorgulaması gerekebilir. Çok sayıda satırda çok sayıda XMLTip'i işlemek ve XPath'leri çalıştırmak performans üzerinde büyük bir etkiye sahiptir, bu nedenle temel tablo her değiştiğinde istenen XML düğümlerini ilişkisel bir tabloya çıkarmak için bir tür materyalize görünüm kullanırız. Bu, sorguyu istek üzerine çalıştıracak standart görünümlerin aksine, sorgunun zamanında fiziksel olarak anlık bir görüntüsünü sağlar.
Saklı bir yordamı daha çok verilerime karşı çağırabileceğim bir yöntem olarak görüyorum, bana göre ise görünüm sorguların veya saklı yordamların oluşturulabileceği temel verilerin sentetik bir sürümünü oluşturmak için bir mekanizma sağlıyor. Basitleştirme veya toplama mantıklı olduğunda bir görünüm oluşturacağım. Çok özel bir hizmet sunmak istediğimde saklı bir prosedür yazacağım.
Görünümlerle ilgili ilginç bir şey, Microsoft Access tarafından tablo olarak görülmesidir: ODBC kullanarak bir SQL veritabanına Microsoft Access ön ucu eklediğinizde, kullanılabilir tablolar listesinde tabloları ve görünümleri görürsünüz. MS Access'te karmaşık raporlar hazırlıyorsanız, SQL sunucusunun birleştirme ve sorgulama yapmasına izin verebilir ve hayatınızı büyük ölçüde basitleştirebilirsiniz. MS Excel'de bir sorgu hazırlamak için Ditto.
Üretim veritabanlarımda yalnızca 10 veya daha fazla görüşüm var. Her zaman kullandığım sütunlar için birkaç tane kullanıyorum. Kullandığım bir set 7 tablodan geliyor, bazıları dış birleşimlerle ve sürekli olarak sadece bir görünümde bu görünümü çağırmak ve bir veya 2 birleşim yapmak zorunda olduğumu yeniden yazmak yerine. Bana göre bu sadece bir zaman tasarrufu.
Bir ana tablo (Ürünler tablosu gibi) ve referans tabloları (ProductType veya ProductDescriptionByLanguage gibi) arasındaki tüm ilişkileri eşleyen xxx oluşturuyorum. Bu, bir ürünü ve tüm ayrıntılarını yabancı anahtarlarından açıklamasına çevirmeme izin verecek bir görünüm oluşturacak. Sonra kolayca ızgaralar, birleşik giriş kutuları, vb oluşturmak için nesneler oluşturmak için ORM kullanabilirsiniz.
Bunu veritabanı şemanızı yeniden düzenleme olarak düşünün.
Bence birincisi, Sorgunun karmaşıklığını gizlemek. Bu görünümler için çok uygundur. Veritabanı tablolarını normalleştirdiğimiz zaman nasıl artar. Tablo sayısı arttığında verileri almak çok zordur.İşlemenin en iyi yolu görünümleri takip etmektir.
Bir tablodaki tüm satırlara / sütuna erişmeyi sınırlamak veya yeniden sınırlamak için görünüm oluştururuz. Sahip yalnızca belirli veya sınırlı satırların / sütunun paylaşılması gerektiğini isterse, bu sütunla bir görünüm oluşturur.
Güvenlik için: Her kullanıcıya veritabanına yalnızca kullanıcının veya kullanıcı grubunun görmeye yetkili olduğu belirli verileri içeren küçük bir görünüm kümesi aracılığıyla erişme izni verir ve kullanıcının diğer verilere erişimini kısıtlar.
Sorgular ve yapı için basitlik : Bir görünüm birkaç tablodan veri çizebilir ve tek bir tablo sunabilir, bilgileri basitleştirebilir ve çok tablolu sorguları bir görünüm için tek tablolu sorgulara dönüştürebilir ve kullanıcılara veritabanı yapısının belirli bir görünümünü sunarak sunabilir. veritabanını belirli kullanıcılara veya kullanıcı gruplarına özgü bir sanal tablolar kümesi olarak.
Tutarlı veritabanı yapısı oluşturmak için : Görünümler, temel kaynak tabloları değiştirilse bile veritabanı yapısının tutarlı, değişmeyen bir görüntüsünü sunar.