Во время обучения в колледже нас ударили, чтобы не обновлять таблицы с помощью представлений, и снова, когда я попал на рабочее место, мы, как нам сказали, не обновляли базу данных с помощью представлений.
Где / Существуют ли существенные последствия для производительности? Или это больше случай, когда старшие разработчики / администраторы баз данных говорят младшему персоналу не делать этого, потому что они могут невольно нанести ущерб неправильному соединению.
РЕДАКТИРОВАТЬ
Я использую MSSQL 2000-2008 (в зависимости от особенностей клиента)
sql-server-2008
view
Тим Спарг
источник
источник
INSTEAD OF
триггер? Я не слышал этот совет, в частности, кстати, тебе никогда не давали причину?instead of
используются триггеры, то нет никакой двусмысленности, и я не вижу причины не использовать их. Но я не очень знаком с SQL Server, поэтому я не могу комментировать использование представлений без триггера.Ответы:
Чтобы представление можно было обновлять без использования
INSTEAD OF
триггеров «SQL Server должен иметь возможность однозначно отслеживать изменения из определения представления в одну базовую таблицу». ,Обновление этих представлений не ухудшает производительность, так как SQL Server просто сгенерирует план запроса для базовой таблицы. Один возможный недостаток может заключаться в том, что он добавляет слой запутывания, поэтому, если вы не используете Views в качестве слоя безопасности, будет проще написать код, который непосредственно обновляет базовую таблицу.
Другой может быть, если представление содержит один ко многим,
JOIN
и вы обновляете сторону «один» значением со стороны «многие», это не определяет, какой результат вы получите, но то же самое относится и к проприетарномуUPDATE ... FROM
синтаксису SQL Server . Вам нужно будет использоватьMERGE
или скалярный коррелированный подзапрос, чтобы избежать этой возможной проблемы.Для представлений, которые не могут быть обновлены и требуют
INSTEAD OF
триггера, это влияет на производительность, поскольку псевдотаблицы иinserted
иdeleted
необходимо генерировать из базовой таблицы, поэтому, если возможно, непосредственное обновление базовых таблиц, вероятно, будет более эффективным.источник