Главная » Microsoft SQL Server, Базы данных » Обновление информации с помощью представлений

0

Одним из самых главных недостатков представлений является то, что их редко можно использовать для обновления данных. На практике, если представление является чем-то большим, нежели простой инструкцией SELECT, велика вероятность, что данные с его помощью обновить будет невозможно.

Любая из следующих причин может сделать представление непригодным для обновлений.

.Дополнительная На самом деле существуют и другие стандартные потенциальные трудности, информация связанные с обновлением и вставкой данных с помощью представлений. В главе 16 мы поговорим о них более подробно.

?               Обновляться может только одна таблица. Если представление использует объединения, то инструкция UPDATE, ссылающаяся на представление, может обновить только одну из таблиц.

?               Триггер INSTEAD OF в приложении или таблице, на которую то ссылается, будет изменять операцию модификации данных. Вместо требуемого изменения данных будет исполнен код триггера.

?               Итоговые функции и группировка, используемые в представлении, сделают невозможным обновление. Дело в том, что SQL Server не сможет определить, какую из строк, участвовавших в консолидации, изменять.

?               Если представление в качестве управляемой таблицы использует подзапрос, ни один из столбцов этой таблицы не может участвовать в выходных данных представления. В то же время в подзапросах, участвующих в качестве управляемых таблиц, допускается консолидация.

?               Если представление создано с использованием параметра WITH CHECK OPTION, то операции вставки и удаления должны удовлетворять условиям предложения WHERE.

?               Имена удаляемых и обновляемых столбцов должны быть уникальными. Если одно и то же имя встречается в нескольких таблицах, на которые ссылается приложение, то имя таблицы должно предшествовать имени столбца (таблица. столбец).

Как вы уже увидели, создать необновляемое представление крайне просто. Однако если проект использует представление для разовых запросов и отчетов, обновление данных может оказаться проблематичным.

Дополнительная Существует один способ обойти невозможность обновления в представлениях, информация Для этого нужно создать триггер instead OF, который инспектируемые дан- ^ “ ные, а затем выполняет допустимую инструкцию update на основе этих данных. В главе 23 мы обсудим создание триггеров instead of.

Альтернативы представлениям

Если ваш стиль программирования предполагает создание множества представлений, то эта глава могла оставить у вас гнетущее впечатление. К счастью, SQL Server 2005 предлагает несколько других альтернатив.

В некоторых случаях хранимые процедуры и функции по производительности не могут сравниться с представлениями. К тому же хранимые процедуры не предлагают связывание схемы (а оно часто требуется), в то время как представления предлагают. В то же время пользовательские функции объединяют довольно высокую скорость, возможность ввода параметров и связывание схемы. Если вам нравится создавать модульные инструкции SQL, такие как представления (как, в частности, и мне), то вам понравятся пользовательские функции.

В главах 18-25 мы подробно обсудим Т-SQL, хранимые процедуры и функции.

Если вы используете представления для поддержки разовых запросов (что я и предполагаю), то можете предоставить кубы службы анализа тем пользователям, которым нужно выполнять сложные исследования данных. Кубы представляют собой предварительно подготовленные итоговые данные, которые можно рассмотреть с разных точек зрения (они называются измерениями). С точки зрения разработчика, создание одного куба часто заменяет собой разработку нескольких запросов или отчетов.

Подробно о создании кубов вы узнаете в главе 43.

Вопросы производительности представлений часто связаны с необходимостью блокировки данных. Ничего страшного в блокировках нет. Если данные извлекаются через представление и инструкция SELECT немедленно выполняется, то блокировка сразу же снимается. Проблема возникает, когда пользователи открывают все множество данных в приложениях, и эти данные остаются открытыми на протяжении всей сессии их просмотра. По этой причине представления незаслуженно получили репутацию черных дыр блокировки. На самом деле проблему создают не сами представления, а программный код или используемые средства. Я решил написать эту небольшую ремарку в защиту представлений и предупредить о потенциальной возможности уменьшения производительности.

Источник: Нильсен, Пол. Microsoft SQL Server 2005. Библия пользователя. : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2008. — 1232 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии