Более поздние версии SQL (2005+), похоже, лучше оптимизируют использование представлений. Представления лучше всего подходят для консолидации бизнес-правил. EG: где я работаю, у нас есть база данных телекоммуникационных продуктов. Каждый продукт назначается тарифному плану, и этот тарифный план может быть заменен, а тарифы в тарифном плане могут быть активированы / деактивированы при увеличении или изменении тарифов.
Чтобы было проще, мы можем создавать вложенные представления. 1-е представление просто соединяет тарифные планы с их тарифами с использованием любых необходимых таблиц и возвращает все необходимые данные, которые понадобятся следующим уровням просмотров. Во втором представлении можно выделить только активные тарифные планы и их активные тарифы. Или просто клиентские тарифы. Или ставки сотрудников (для сотрудников скидка). Или бизнес против частных клиентов. (тарифные планы могут быть сложными). Дело в том, что базовое представление гарантирует, что наша общая бизнес-логика для тарифных планов и тарифов правильно объединены в одном месте. Следующий уровень представлений дает нам больше внимания конкретным тарифным планам (типам, активным / неактивным и т. Д.).
Я согласен с тем, что представления могут затруднить отладку, если вы создаете запросы и представления одновременно. Но если вы используете проверенное представление, это облегчает отладку. Вы знаете, что представление уже прошло через звонок, поэтому вы знаете, что, скорее всего, это не вызывает проблемы.
Проблемы могут возникнуть с вашими взглядами, хотя. "что если продукт связан только с неактивным тарифным планом?" или "что если тарифный план имеет только неактивные тарифы?" Что ж, это можно поймать на уровне интерфейса с помощью логики, которая ловит ошибки пользователя. Msgstr "Ошибка, продукт на неактивном тарифном плане ... пожалуйста, исправьте". Мы также можем запустить аудит запросов, чтобы дважды проверить его перед выполнением биллинга. (выберите все планы и оставьте соединение с активным представлением тарифного плана, верните только планы, которые не получают активный тарифный план в качестве проблем, требующих решения).
Хорошая вещь в этом заключается в том, что представления позволяют вам значительно сокращать запросы для отчетов, выставления счетов и т. Д. Вы можете иметь представление учетной записи клиента, а затем представление только активных клиентов 2-го уровня. Команда, которая с учетом адреса клиента. Команда, которая с точки зрения продукта (ов) (присоединился к тому, что продукт (ы) клиент имеет). Команда, чтобы посмотреть тарифный план продукта (ов). Команда, которая с учетом особенностей продукта. Просмотр, просмотр, просмотр, каждая пробная версия с ошибками для обеспечения целостности. Ваш конечный запрос с использованием представлений очень компактен.
редактировать:
В качестве примера того, как представление было бы лучше, чем простой запрос таблиц ... у нас был временный подрядчик, чтобы внести некоторые изменения. Они сказали ему, что есть взгляды на вещи, но он решил сгладить все свои запросы. Биллинг проверял некоторые из его запросов. Они продолжали получать несколько тарифных планов и ставок на вещи. Оказывается, в его запросах отсутствовали критерии, позволяющие ставкам выставлять счета только в том случае, если они находились между датами начала и окончания, в которые тарифный план должен был использовать эти / эти ставки во время. К сожалению. Если бы он использовал вид, он бы уже учел эту логику.
По сути, вы должны взвесить производительность против здравомыслия. Может быть, вы можете сделать все возможное, чтобы повысить производительность базы данных. Но, если это означает, что для нового человека это кошмарный переход, то стоит ли это того? Действительно ли стоит новому парню, который должен сыграть в заблуждение, чтобы найти все запросы, которые должны изменить их логику (и рискнуть, что он забудет / проглотит их), потому что кто-то решил, что взгляды "плохие" и разве не объединена какая-то основная бизнес-логика в такую, которая могла бы использоваться в сотнях других запросов? Это действительно зависит от вашего бизнеса и вашей команды IT / IS / DB. Но я бы предпочел ясность и консолидацию из одного источника, а не производительность.