Późniejsze wersje SQL (2005+) wydają się lepiej optymalizować wykorzystanie widoków. Widoki najlepiej nadają się do konsolidacji reguł biznesowych. EG: tam, gdzie pracuję, mamy bazę danych produktów telekomunikacyjnych. Każdy produkt jest przypisany do planu stawek, który może zostać zamieniony, a stawki na planie stawek mogą zostać aktywowane / dezaktywowane w miarę zwiększania lub modyfikowania stawek.
Aby to ułatwić, możemy tworzyć zagnieżdżone widoki. Pierwszy widok po prostu łączy plany taryfowe z ich stawkami przy użyciu dowolnych potrzebnych tabel, a zwracając wszelkie niezbędne dane, potrzebne będą kolejne poziomy widoków. 2. widok (y) może izolować tylko aktywne plany stawek i ich aktywne stawki. Lub tylko stawki klientów. Lub stawki pracownicze (dla rabatu pracowniczego). Lub stawki dla klientów biznesowych i indywidualnych. (plany taryfowe mogą się komplikować). Chodzi o to, że widok fundamentu zapewnia naszą logikę biznesową planów taryfowych, a stawki są odpowiednio łączone w jednym miejscu. Kolejna warstwa widoków pozwala nam bardziej skupić się na konkretnych planach stawek (typy, aktywne / nieaktywne itp.).
Zgadzam się, że widoki mogą sprawiać, że debugowanie będzie nieporządne, jeśli jednocześnie budujesz zapytania i widoki. Ale jeśli używasz sprawdzonego widoku, ułatwia to debugowanie. Wiesz, że widok przeszedł już przez dzwonek, więc wiesz, że najprawdopodobniej nie powoduje problemu.
Twoje poglądy mogą jednak powodować problemy. „co jeśli produkt jest powiązany tylko z nieaktywnym planem stawek?” lub „co jeśli plan taryfowy zawiera wyłącznie stawki nieaktywne?” Cóż, można to złapać na poziomie frontonu dzięki logice, która wyłapuje błędy użytkownika. „Błąd, produkt ma nieaktywny plan stawek ... proszę poprawić”. Możemy również przeprowadzać audyty zapytań, aby dokładnie je sprawdzić przed uruchomieniem rozliczeń. (wybierz wszystkie plany i pozostaw dołączenie do aktywnego widoku planu taryfowego, zwracaj tylko plany, które nie otrzymują aktywnego planu taryfowego, jako problemy wymagające rozwiązania).
Dobrą rzeczą jest to, że widoki pozwalają znacznie ograniczyć zapytania dotyczące raportów, fakturowania itp. Możesz mieć widok konta klienta, a następnie widok drugiego poziomu tylko aktywnych klientów. Połącz to z widokiem adresu klienta. Połącz to z widokiem produktu (produktów) (dołączyłem do tego, co klient ma). Połącz to, aby wyświetlić plan taryfowy produktu. Połącz to z widokiem funkcji produktu. Zobacz, zobacz, zobacz, każda próba-pomyłka dla zapewnienia integralności. Twoje zapytanie końcowe przy użyciu widoków jest bardzo zwarte.
edytować:
Jako przykład tego, jak widok byłby lepszy niż zwykłe zapytanie o tabele ... mieliśmy tymczasowego wykonawcę, który wprowadził pewne zmiany. Powiedzieli mu, że istnieją poglądy na różne rzeczy, ale postanowił spłaszczyć wszystkie swoje zapytania. Billing odpalał niektóre z jego zapytań. Ciągle otrzymywali wiele planów taryfowych i stawki na rzeczy. Okazało się, że w jego zapytaniach brakowało kryteriów pozwalających na naliczanie stawek tylko wtedy, gdy były one między datą początkową i końcową, w której plan taryfowy miał stosować te / te stawki podczas. Ups Gdyby skorzystał z tego widoku, uwzględniłby już tę logikę.
Zasadniczo musisz porównać wydajność z rozsądkiem. Być może możesz zrobić różne fantazyjne rzeczy, aby zwiększyć wydajność bazy danych. Ale jeśli oznacza to, że przejęcie / utrzymanie nowej osoby jest koszmarem, czy naprawdę jest tego warte? Czy naprawdę warto, aby nowy facet grał w walenie w kret i znajdował wszystkie pytania, które muszą zmienić ich logikę (i ryzykować, że je zapomni / przekręci palcami) b / c ktoś uznał, że poglądy są „złe” i nie skonsolidowałeś logiki biznesowej w jedną, która mogłaby zostać wykorzystana w setkach innych zapytań? To naprawdę zależy od Twojej firmy i zespołu IT / IS / DB. Wolę jednak przejrzystość i konsolidację z jednego źródła niż wydajność.