Пізніші версії SQL (2005+) здаються кращими для оптимізації використання поглядів. Перегляди найкращі для консолідації бізнес-правил. EG: там, де я працюю, ми маємо базу даних про телекомунікаційні продукти. Кожен продукт призначений до тарифного плану, і цей тарифний план може бути замінений, і ставки на тарифному плані можуть активізуватися / вимкнутись із збільшенням або зміною ставок.
Щоб зробити це легше, ми можемо зробити вкладені подання. Перший вигляд просто приєднує тарифні плани до своїх тарифів, використовуючи необхідні таблиці, і повертає будь-які необхідні дані для наступних рівнів переглядів. Другий вид (и) може ізолювати лише активні тарифні плани та їх активні швидкості. Або просто ставки клієнтів. Або ставки працівників (за знижкою працівника). Або бізнес та ставки клієнтів. (тарифні плани можуть ускладнитися). Справа в тому, що представлення фундаменту забезпечує нашу загальну логіку бізнесу для тарифних планів і тарифів, які належним чином поєднуються в одному місці. Наступний рівень поглядів надає нам більше уваги на конкретних тарифних планах (типи, активні / неактивні тощо).
Я погоджуюся, що представлення даних може зробити налагодження безладним, якщо ви одночасно створюєте запити та перегляди. Але якщо ви використовуєте перевірений n-довірений вигляд, це робить налагодження простішим. Ви знаєте, що погляд вже пройшов через дзвінок, тож ви знаєте, що це, швидше за все, не викликає проблеми.
Проблеми, однак, можуть підійти до ваших поглядів. "що робити, якщо продукт асоціюється лише з неактивним планом тарифу?" або "що робити, якщо тарифний план має лише неактивні тарифи?" Ну, це може потрапити на передній рівень за допомогою логіки, яка виявляє помилки користувачів. "Помилка, продукт перебуває у неактивному плані тарифу ... будь ласка, виправте". Також ми можемо запустити аудит запитів, щоб подвійно перевірити його перед запуском рахунків. (виберіть усі плани та залиште приєднатися до перегляду активних тарифних планів; поверніть лише плани, які не отримують активний план тарифів, як проблеми, які потрібно вирішити)
Хороша справа в тому, що перегляди дозволяють значно скоротити запити щодо звітування, виставлення рахунків тощо. Ви можете мати перегляд облікового запису клієнта, а потім перегляд другого рівня лише активних клієнтів. Команда, яка враховує адресу клієнта. Команда, яка переглядає товар (и) (приєднався до того, який товар (и) має клієнт). Команда, яка переглядає тарифний план продукту. Команда, яка враховує особливості продукту. Переглядайте, переглядайте, переглядайте кожну пробну помилку n-n, для забезпечення цілісності. Ваш кінцевий запит із використанням представлень дуже компактний.
редагувати:
Як приклад того, як перегляд був би кращим, ніж просто плоский запит таблиць ... у нас був підрядник із тимчасових тем, щоб внести деякі зміни. Вони сказали йому, що є погляди на речі, але він вирішив згладити всі свої запити. Біллінг запускав речі з деяких його запитів. Вони продовжували отримувати кілька тарифних планів і ставок на речі. Виявляється, у його запитах не було критеріїв, щоб дозволити нарахування тарифів лише у тому випадку, коли вони знаходилися між початковою та кінцевою датами. На жаль Якби він використав погляд, він би вже врахував цю логіку.
В основному, ви повинні зважувати продуктивність проти розумності. Можливо, ви можете робити всілякі химерні речі для підвищення продуктивності бази даних. Але якщо це означає, що це новий кошмар, який повинен перейняти / утримати нову людину, чи справді це варто? Чи справді варто, щоб новому хлопцеві довелося грати в грубий моль, знаходячись на всі запити, які потребують змінити їх логіку (і ризикувати, що він їх забуде / товстує) б / с хтось вирішив, що погляди "погані" і не консолідували якусь основну логіку бізнесу в ту, яку можна було б використати в 100-х інших запитах? Це справді залежить від вашого бізнесу та вашої команди IT / IS / DB. Але я вважаю за краще чіткість і консолідація одного джерела над продуктивністю.